Какие знаешь методы жизненного цикла Activity и как они отрабатывают
Методы жизненного цикла Activity — это набор колбэков, которые вызываются системой при переходе активности между состояниями: создание, запуск, остановка и уничтожение. Основные методы: onCreate(), onStart(), onResume(), onPause(), onStop(), onRestart(), onDestroy(). Они образуют последовательность, которую важно понимать для корректного управления ресурсами и UI.
Как это работает
Жизненный цикл Activity можно представить как конечный автомат. Каждый метод вызывается в строго определённый момент, и переходы между состояниями всегда происходят в одном порядке. Вот полная цепочка вызовов при нормальной работе:
onCreate()— вызывается при создании активности. Здесь выполняется базовая инициализация: разметка, создание ViewModel, восстановление состояния изsavedInstanceState.onStart()— активность становится видимой для пользователя, но ещё не в фокусе. Здесь можно начинать анимации или обновлять UI.onResume()— активность получает фокус и готова к взаимодействию. Здесь стоит запускать анимации, слушатели, GPS-трекеры.onPause()— активность частично видима, но теряет фокус (например, при появлении диалога). Здесь нужно останавливать тяжёлые операции, сохранять временные данные.onStop()— активность полностью скрыта другой активностью или пользователь вышел на главный экран. Здесь освобождают ресурсы, которые не нужны в фоне.onRestart()— вызывается передonStart(), если активность была остановлена и снова возвращается на экран.onDestroy()— активность уничтожается (пользователь закрыл, система освобождает память). Здесь финальная очистка: отписка от слушателей, закрытие БД.
Пример
Рассмотрим типичный сценарий: пользователь открывает приложение, затем нажимает кнопку «Домой», а потом возвращается обратно.
- Запуск:
onCreate()→onStart()→onResume() - Уход на главный экран:
onPause()→onStop() - Возврат:
onRestart()→onStart()→onResume()
Если активность полностью закрывается (например, через finish()), цепочка будет: onPause() → onStop() → onDestroy().
Подводные камни
- Не путайте
onPause()иonStop():onPause()вызывается при частичной видимости,onStop()— при полной. Например, при появлении системного диалога (например, запрос разрешения) вызывается толькоonPause(), аonStop()— нет. onSaveInstanceState()— не является методом жизненного цикла, но вызывается междуonPause()иonStop(). Используйте его для сохранения UI-состояния, а не для хранения данных.- Не выполняйте тяжёлые операции в
onCreate()— это замедлит запуск. Переносите их в фоновые потоки или вonResume(). - Помните о повороте экрана: при повороте активность уничтожается и создаётся заново, поэтому все данные нужно сохранять через
savedInstanceStateили ViewModel. onDestroy()может не вызваться в случае, если система убивает процесс в фоне. Поэтому не полагайтесь на него для критически важных сохранений.
Когда использовать
onCreate()— инициализация UI, создание объектов, восстановление состояния.onResume()— запуск анимаций, подписка на слушателей, начало обновления данных.onPause()— остановка анимаций, сохранение черновиков, освобождение ресурсов, которые не нужны при потере фокуса.onStop()— освобождение ресурсов, которые не нужны в фоне, например, отключение GPS.onDestroy()— финальная очистка: отписка от BroadcastReceiver, закрытие курсоров.
Коротко
- Основные методы:
onCreate,onStart,onResume,onPause,onStop,onRestart,onDestroy. - Порядок вызовов строго детерминирован: при запуске
onCreate→onStart→onResume, при уходеonPause→onStop, при возвратеonRestart→onStart→onResume. onPause— частичная видимость,onStop— полная скрытость.- Используйте
onSaveInstanceStateдля сохранения UI-состояния, а не для данных. - При повороте экрана активность пересоздаётся, поэтому данные должны быть восстановлены через
savedInstanceStateили ViewModel.
