Какие знаешь методы жизненного цикла 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()