Каков жизненный цикл активности Android? Почему так много подобных методов зондирования ( onCreate()
, onStart()
, onResume()
) вызывается во время инициализации, и многие другие ( onPause()
, onStop()
, onDestroy()
) вызывается в конце?
Когда эти методы вызываются и как их следует использовать правильно?
Ответы:
Смотрите это в Activity Lifecycle (у разработчиков Android).
onCreate () :
onRestart () :
onStart () :
onResume () :
onPause () :
onStop () :
onDestroy () :
Когда активность загружается в первый раз, события вызываются так:
Когда вы нажимаете кнопку «Телефон», действие переходит в фоновый режим и вызываются следующие события:
Выйдите из номеронабирателя телефона, и будут вызваны следующие события:
Когда вы нажимаете кнопку « Назад» ИЛИ пытаетесь завершить () действие, события вызываются, как показано ниже:
Состояния активности
ОС Android использует очередь с приоритетами для управления действиями, выполняемыми на устройстве. В зависимости от состояния, в котором находится конкретное действие Android, ему будет присвоен определенный приоритет в ОС. Эта приоритетная система помогает Android идентифицировать действия, которые больше не используются, что позволяет ОС восстанавливать память и ресурсы. Следующая диаграмма иллюстрирует состояния, через которые может проходить активность в течение ее жизненного цикла:
Эти состояния можно разбить на три основные группы следующим образом:
Активно или работает - Действия считаются активными или выполняющимися, если они находятся на переднем плане, также известном как верхняя часть стека действий. Это считается активностью с наивысшим приоритетом в стеке активности Android, поэтому ОС будет уничтожена только в экстремальных ситуациях, например, если действие пытается использовать больше памяти, чем доступно на устройстве, так как это может привести к тому, что пользовательский интерфейс стать неотзывчивым
Приостановлено - когда устройство переходит в спящий режим, или активность все еще видна, но частично скрыта новым, не в натуральную величину или прозрачным действием, действие считается приостановленным. Приостановленные действия все еще живы, то есть они поддерживают всю информацию о состоянии и членах и остаются привязанными к оконному менеджеру. Это считается вторым по приоритету действием в стеке активности Android и, как таковое, будет уничтожено ОС только в том случае, если уничтожение этого действия удовлетворит требования к ресурсам, необходимые для поддержания активной / активной активности в стабильном и отзывчивом состоянии.
Остановлено - действия, которые полностью скрыты другим действием, считаются остановленными или в фоновом режиме. Остановленные действия по-прежнему пытаются сохранить информацию о своем состоянии и членах как можно дольше, но остановленные действия считаются самым низким приоритетом из трех состояний, и, как таковая, ОС вначале уничтожит действия в этом состоянии, чтобы удовлетворить требования к ресурсам. приоритетных видов деятельности.
* Пример деятельности, чтобы понять жизненный цикл **
источник
Активность имеет шесть состояний
Жизненный цикл активности имеет семь методов
onCreate()
onStart()
onResume()
onPause()
onStop()
onRestart()
onDestroy()
Ситуации
Когда откроете приложение
Когда кнопка назад нажата и выход из приложения
Когда нажата домашняя кнопка
После нажатия кнопки «Домой» при повторном открытии приложения из списка последних задач или нажатии на значок
Когда открыть приложение другое приложение из панели уведомлений или открыть настройки
Нажатие кнопки «Назад» в другом приложении или настройках, после чего вы можете увидеть наше приложение
Когда любой диалог открывается на экране
После закрытия диалогового окна или кнопки возврата из диалогового окна
Любой телефон звонит и пользователь в приложении
Когда пользователь нажал кнопку ответа телефона
После завершения вызова
Когда экран телефона выключен
Когда экран снова включен
источник
Вся путаница вызвана тем, что Google выбрал неинтуитивные имена вместо чего-то следующего:
Диаграмму деятельности можно интерпретировать как:
источник
ЖИЗНЕННЫЙ ЦИКЛ АНДРОИДА
Существует семь методов, управляющих жизненным циклом приложения Android:
Ответьте за то, что все эти методы для:
Давайте рассмотрим простой сценарий, когда знание того, в каком порядке эти методы вызываются, поможет нам понять, почему они используются.
onCreate()
- - -> - - ->onStart()
onResume()
onPause()
- - ->onStop()
onRestart()
- - -> - - ->onStart()
onResume()
onStop()
- - ->onDestroy()
Существует четыре состояния, в которых может существовать активность:
Начальное состояние включает в себя:
Создание нового процесса Linux, выделение новой памяти для новых объектов пользовательского интерфейса и настройка всего экрана. Так что большая часть работы проводится здесь.
Ходовое состояние включает в себя:
Это активность (состояние), которая в данный момент отображается на экране. Одно это состояние обрабатывает такие вещи, как набор текста на экране и касание и нажатие кнопок.
Приостановленное состояние включает в себя:
Если действие не на переднем плане, а на заднем плане, то считается, что действие находится в состоянии паузы.
Остановленное состояние включает в себя:
Остановленную активность можно купить только на переднем плане, перезапустив ее, а также она может быть уничтожена в любой момент времени.
Менеджер операций обрабатывает все эти состояния таким образом, чтобы пользовательский опыт и производительность всегда были наилучшими даже в тех случаях, когда новое действие добавляется к существующим действиям.
источник
Мне нравится этот вопрос и ответы на него, но пока нет покрытия менее часто используемых обратных вызовов, таких как onPostCreate () или onPostResume () . Стив Помрой попытался представить диаграмму, включающую эти и их связь с жизненным циклом фрагмента Android , на https://github.com/xxv/android-lifecycle . Я изменил большую диаграмму Стива, включив в нее только часть « Активность», и отформатировал ее для одностраничной распечатки размером букв. Я разместил его в виде текстового PDF на https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf и ниже его изображение:
источник
Со страницы разработчиков Android,
OnPause ():
OnStop ():
Теперь предположим, что есть три действия, и вы переходите от A к B, тогда onPause of A теперь будет вызываться из B в C, затем вызывается onPause of B и onStop of A.
Приостановленное действие получает резюме, а остановленное перезапускается.
Когда вы звоните
this.finish()
, вызывается onPause-onStop-onDestroy. Главное, что нужно запомнить: приостановленные действия останавливаются, а остановленные действия уничтожаются всякий раз, когда Android требуется память для других операций.Надеюсь, это достаточно ясно.
источник
Добавление дополнительной информации поверх высоко оцененного ответа (добавлен дополнительный раздел KILLABLE и следующий набор методов, которые будут вызываться в жизненном цикле):
Источник: developer.android.com
Обратите внимание на столбец « Killable » в приведенной выше таблице - для тех методов, которые помечены как подлежащие уничтожению, после того, как этот метод вернет процесс, в котором действие может быть уничтожено системой в любое время без выполнения другой строки ее кода.
Из-за этого вы должны использовать
onPause()
метод для записи любых постоянных данных (таких как пользовательские изменения) в хранилище. Кроме того, методonSaveInstanceState(Bundle)
вызывается перед переводом действия в такое фоновое состояние, что позволяет вам сохранить любое динамическое состояние экземпляра в вашем действии в заданномBundle
для последующего полученияonCreate(Bundle)
при необходимости повторного создания действия.Обратите внимание, что важно сохранять постоянные данные,
onPause()
а неonSaveInstanceState(Bundle)
потому, что последние не являются частью обратных вызовов жизненного цикла, поэтому не будут вызываться в каждой ситуации, как описано в его документации.Я хотел бы добавить еще несколько методов. Они не перечислены как методы жизненного цикла, но будут вызываться в течение жизненного цикла в зависимости от некоторых условий. В зависимости от ваших требований вам может потребоваться реализовать эти методы в вашем приложении для правильной обработки состояния.
Мой код приложения использует все эти методы:
Активность входа:
вывод: (перед паузой)
вывод: (после возобновления из паузы)
Обратите внимание, что
onPostResume()
вызывается, даже если он не указан как метод жизненного цикла.источник
Я веду некоторые журналы согласно ответам выше, и вот вывод:
Начальная деятельность
Остановка деятельности
По моему личному мнению, только два требуются onStart и onStop.
onResume, кажется, в каждом случае возврата, а onPause в каждом случае ухода (кроме закрытия приложения).
источник