OnNewIntent () и зарегистрированные слушатели

Я использую операцию SingleTop для получения намерений из диалога поиска через onNewIntent() .

Я заметил, что onPause() вызывается перед onNewIntent() , а затем после этого вызывает onResume() . Визуально:

  • Диалог поиска
  • Намерение по поиску
  • onPause()
  • onNewIntent()
  • onResume()

Проблема в том, что у меня есть слушатели, зарегистрированные в onResume() которые удаляются в onPause() , но они необходимы внутри onNewIntent() . Есть ли стандартный способ сделать этих слушателей доступными?

Solutions Collecting From Web of "OnNewIntent () и зарегистрированные слушатели"

onNewIntent() означает точку входа для однократных действий, которые уже выполняются где-то еще в стеке и поэтому не могут вызвать 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 () всегда вызывается для операций 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 }