를 통해 검색 대화 상자에서 의도를 수신하기 위해 singleTop Activity를 사용하고 onNewIntent()
있습니다.
내가 알아 차린 것은 onPause()
전에 onNewIntent()
호출 된 다음 호출 onResume()
됩니다. 시각적으로 :
- 검색 대화가 시작되었습니다
- 활동에 해고 된 검색 의도
onPause()
onNewIntent()
onResume()
문제는 내가에 등록 된 리스너해야한다는 것입니다 onResume()
제거하는 GET을 onPause()
,하지만 그들은 내부에 필요한 onNewIntent()
전화를. 그러한 청취자를 이용할 수있게하는 표준 방법이 있습니까?
답변
onNewIntent()
는 스택의 다른 곳에서 이미 실행되어 호출 할 수없는 singleTop 활동의 진입 점으로 사용됩니다 onCreate()
. 따라서 활동 라이프 사이클 관점에서 onPause()
전에 호출 해야 onNewIntent()
합니다. 이 리스너를 사용하지 않도록 활동을 다시 작성하는 것이 좋습니다 onNewIntent()
. 예를 들어 대부분의 경우 내 onNewIntent()
방법은 다음과 같습니다.
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// getIntent() should always return the most recent
setIntent(intent);
}
모든 설정 로직에서 일어나고으로 onResume()
활용하여 getIntent()
.
답변
참고 : 다른 방법으로 라이프 사이클 메소드를 호출하는 것은 좋지 않습니다. 아래 예제에서 귀하의 onNewIntent가 항상 활동 유형에 관계없이 호출되도록 노력했습니다.
OnNewIntent ()는 활동이 처음 작성된 경우를 제외하고 항상 singleTop / Task 활동에 대해 호출됩니다. 이때 onCreate는이 스레드에서 요청 된 몇 가지 쿼리에 대한 솔루션 제공을 호출합니다.
onNewIntent를 다음과 같은 onCreate 메소드에 넣어 항상 호출 할 수 있습니다
@Override
public void onCreate(Bundle savedState){
super.onCreate(savedState);
onNewIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//code
}