Какие знаешь методы жизненного цикла Activity и как они отрабатывают
Жизненный цикл Activity в Android определяет, в каком порядке система Android вызывает методы активности в ответ на действия пользователя, системные события или изменение конфигурации. Он гарантирует, что приложение корректно создаёт, отображает, сохраняет и уничтожает пользовательский интерфейс. Каждый метод жизненного цикла можно переопределить, чтобы выполнять действия в нужный момент — от инициализации до освобождения ресурсов.
Основные методы жизненного цикла Activity
1. onCreate(Bundle?)
- **Вызывается один раз при создании Activity.
** -
Здесь происходит:
-
установка макета через setContentView();
-
инициализация компонентов UI;
-
восстановление состояния из savedInstanceState.
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
Если пользователь закроет приложение, и система его завершит, то при повторном запуске Activity начнётся с onCreate().
2. onStart()
- **Вызывается после onCreate() и каждый раз, когда Activity становится видимой.
** -
В этот момент пользователь видит интерфейс, но Activity ещё не в фокусе (например, может быть открыта диалоговая активность сверху).
-
Здесь можно запускать процессы, не требующие фокуса — например, анимации, подготовка UI.
override fun onStart() {
super.onStart()
// UI уже виден, но еще не активен
}
3. onResume()
-
Вызывается после onStart(), когда Activity переходит в foreground и становится активной.
-
Это момент, когда пользователь начинает взаимодействие с Activity.
-
Здесь стоит запускать:
-
прослушку сенсоров;
-
воспроизведение видео/аудио;
-
подключение к серверу (если нужно в реальном времени).
-
override fun onResume() {
super.onResume()
// Activity в фокусе и готова к взаимодействию
}
4. onPause()
-
Вызывается, когда Activity теряет фокус, но ещё остаётся видимой (например, поверх открылась диалоговая активность).
-
Важно:
-
приостановить действия, требующие фокуса (например, видео);
-
сохранить пользовательские данные;
-
остановить broadcast receivers, location updates.
-
override fun onPause() {
super.onPause()
// Activity потеряла фокус, но может быть видимой
}
5. onStop()
- **Вызывается, когда Activity полностью становится невидимой.
** -
Здесь:
-
освобождаются ресурсы, не нужные в фоне;
-
сохраняется состояние в SharedPreferences, Room, ViewModel.
-
override fun onStop() {
super.onStop()
// UI больше не виден
}
Если пользователь вернётся в Activity, будет вызван onRestart() → onStart() → onResume().
6. onRestart()
- **Вызывается после onStop(), если Activity будет снова запущена.
** - Не вызывается при первой инициализации, только при возврате назад.
override fun onRestart() {
super.onRestart()
// Activity вернулась после остановки
}
7. onDestroy()
- **Вызывается, когда Activity уничтожается.
** -
Это может произойти:
-
при завершении активности вызовом finish();
-
при уничтожении системой из-за нехватки памяти;
-
при смене конфигурации (например, поворот экрана).
-
override fun onDestroy() {
super.onDestroy()
// Финальная очистка ресурсов
}
Жизненный цикл в реальности: пример последовательности
При первом запуске:
onCreate() → onStart() → onResume()
При переходе на другую Activity:
onPause() → onStop()
При возвращении назад:
onRestart() → onStart() → onResume()
При закрытии активности:
onPause() → onStop() → onDestroy()
Сценарии смены конфигурации (например, поворот экрана)
При повороте экрана происходит:
onPause() → onStop() → onDestroy() → onCreate() → onStart() → onResume()
Так как конфигурация изменилась (ориентация, язык и т.д.), Activity пересоздаётся.
Для сохранения состояния используется onSaveInstanceState():
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("key", "value")
}
А в onCreate() данные можно восстановить:
val restoredValue = savedInstanceState?.getString("key")
Взаимодействие с жизненным циклом: ViewModel, LiveData, CoroutineScope
-
ViewModel живёт дольше Activity, пересоздание не уничтожает ViewModel.
-
LiveData автоматически реагирует на жизненный цикл: подписчики активны только в onStart() и onResume().
-
LifecycleScope в Android KTX позволяет запускать корутины, завязанные на жизненный цикл активности:
lifecycleScope.launch {
// будет отменено при onDestroy()
}
Расширенные методы (реже используются)
-
onPostCreate() — вызывается сразу после onCreate()
-
onPostResume() — после onResume()
-
onUserLeaveHint() — при переходе пользователя из активности (например, при нажатии «домой»)
-
onSaveInstanceState() — для сохранения данных при пересоздании активности
Итоговая диаграмма переходов
Создание:
onCreate()
onStart()
onResume()
Уход из активности:
onPause()
onStop()
onDestroy()
Возврат в активность:
onRestart()
onStart()
onResume()
Или при смене конфигурации:
onPause()
onStop()
onDestroy()
→ onCreate()
onStart()
onResume()