Intereting Posts
Конвертировать UTC в локальное время на Android Измените структуру файла проекта после перехода с Eclipse на структуру студий Android Studio Как выпустить AAR с другой зависимостью проекта библиотеки Android? HttpResponse с использованием проблемы Android: выполнение всегда вызывает исключение? Очистить маркеры от Google Карты на Android Устройства Motorola: org.threeten.bp.DateTimeException при анализе даты в ThreeTen Android.support.v4.util.Pair vs android.util.Pair SimpleCursorAdapter устарел в API версии 15? Android: открытие сохраненного файла в приложении по умолчанию из моего приложения HttpsURLconnection для публикации и входа в Android Как заставить переполнение меню на Android-панели? Найти макет корня в деятельности Как сделать панель контекстного ActionMode наложением панели инструментов appcompat-v7, но не ящиком навигации? Переменная пути Unbound класса java android eclipse Не удалось получить доступ к adb в OS X через Terminal, «команда не найдена»

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 }