Жизненный цикл активности Android — onPause() и onResume()

На диаграмме разработчика Android я увидел, что onResume() всегда вызывается перед onPause(). Предполагая, что пользователь запускает новый Activity, почему onPause() должен предшествовать onResume()?

Я имею в виду:

OnResume можно вызывать в двух случаях:

1) когда пользователь начинает новую активность (до OnPause)

2) когда активность находится в фоновом режиме и если пользователь возвращает активность на передний план

Я ожидаю, что в каждом случае должно быть сделано что-то еще.


person Day_Dreamer    schedule 11.03.2015    source источник


Ответы (3)


Вы ошибаетесь. Всякий раз, когда создается действие, onResume вызывается сразу после onStart. Всякий раз, когда ваша активность возвращается в стек, вызывается onPause. Опять же, если ваша активность возвращается на передний план, вызывается onResume. Таким образом, это не похоже на то, что onResume вызывается перед onPause. Всякий раз, когда действие возвращается из состояния onPause, вызывается onResume вместо onStart или onCreate. Это происходит для того, чтобы Android не приходилось снова и снова создавать экземпляр Activity, хотя эти экземпляры не уничтожались должным образом. Это также довольно эффективно для памяти.

ПРИМЕЧАНИЕ. Если ваше приложение запущено и пользователь нажимает кнопку назад или кнопку домой, действие проходит через onPause()< /strong> и состояние onStop(). После этого, если пользователь снова возвращается в ваше приложение, последовательно будут вызываться onRestart(), onStart() и onResume(). .

Тогда, когда активность находится только в состоянии onPause()? Когда диалоговое окно появляется поверх вашей активности или ваша активность получает отображается на разделенном экране, но не имеет фокуса (пользователь не взаимодействует с вашим приложением). В этих случаях активность переходит только в состояние onPause().

person Abhishek    schedule 11.03.2015

onResume() всегда вызывается перед onPause()

Это верно. onResume всегда вызывается, когда действие запускается в первый раз, до onCreate и когда действие возобновляется (пользователь возвращается к вашему действию)

Предполагая, что пользователь запускает новое действие, почему onPause() должно предшествовать onResume()

onPause вызывается только тогда, когда действие переводится в фоновый режим или перед onDestroy, если приложение уничтожается. Таким образом, onPause всегда вызывается после вызова onResume. Почему? Потому что это жизненный цикл Activity, определенный платформой Android.

person Marcus    schedule 11.03.2015

Жизненный цикл деятельности выглядит следующим образом

  1. Новый запуск с помощью onCreate(), onStart(), onResume.... и закрытие с помощью onPause()->onStop()->onDestroy()
  2. Желтый фон: активность переходит в фоновый режим и, таким образом, больше не видна. Пользователь возвращается к действию.
    например.

    • Switch off the phone screen while the activity is running: onPause()->onStop()
    • Снова включите экран: onStart() -> onResume()
  3. Зеленый фон: активность остается в видимой области экрана, но не активна, например. Активируйте несколько окон (разделенный экран), каждое из которых занимает одну часть экрана, и подсказка для вашего приложения, чтобы сделать его активным.

    • tip on the other app: onPause() is called in your app as it goes into pause but is still visible
    • Совет по вашему приложению: onResume() вызывается

жизненный цикл активности

Вот пример разделенного экрана с двумя приложениями:

разделить экран с двумя приложениями

подробности см. в документации Android по жизненному циклу активности

person tuxdost    schedule 10.01.2019