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