жизненный цикл onNewIntent() и зарегистрированные прослушиватели



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



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




  • окне поиска, запущенного

  • поиск намерения выстрелил в действие

  • onPause()

  • onNewIntent()

  • onResume()


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

745   2  

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

    Ничего не найдено.