onNewIntent () 라이프 사이클 및 등록 된 리스너 된 다음 호출

를 통해 검색 대화 상자에서 의도를 수신하기 위해 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
}