жизненный цикл onNewIntent() и зарегистрированные прослушиватели
Я использую синглетную активность для получения намерений из диалогового окна поиска через onNewIntent().
я заметил, что onPause() вызывается перед onNewIntent(), а потом он называет onResume(). Визуально:
- окне поиска, запущенного
- поиск намерения выстрелил в действие
onPause()onNewIntent()onResume()
проблема в том, что у меня есть слушатели зарегистрирован в onResume() которые удаляются в onPause(), но они нужны внутри onNewIntent() звонок. Есть ли стандартный способ сделать этих слушателей доступными?
2 ответов:
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 всегда будет вызываться независимо от типа вашей деятельности.
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 }
Comments