← Назад к вопросам

Что происходит в коллбэках жизненного цикла Activity

1.0 Junior🔥 141 комментариев
#Опыт и софт-скиллы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Жизненный цикл Activity и его коллбэки

Жизненный цикл Activity (Activity Lifecycle) — это последовательность состояний, в которых находится компонент приложения Android от создания до уничтожения. Коллбэки (callback methods) — это методы, вызываемые системой в ключевые моменты этого цикла. Правильное управление жизненным циклом критически важно для стабильности приложения, сохранения данных и ресурсов.

Основные коллбэки и их назначение

Система вызывает коллбэки в строгом порядке, образуя четкую последовательность. Рассмотрим основные методы.

onCreate()

Это первый метод, вызываемый при создании Activity. Здесь выполняется базовая инициализация:

  • Загрузка layout через setContentView().
  • Инициализация UI элементов (находка View по ID).
  • Настройка начального состояния данных.
  • Восстановление состояния из savedInstanceState (если Activity была перезапущена после уничтожения).
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // Инициализация View
    textView = findViewById(R.id.text_view)

    // Восстановление состояния, если оно есть
    if (savedInstanceState != null) {
        val savedText = savedInstanceState.getString("KEY_TEXT")
        textView.text = savedText
    }
}

onStart()

Вызывается непосредственно перед тем, как Activity становится видимой для пользователя. Здесь часто выполняются:

  • Подготовка ресурсов, необходимых для отображения (например, регистрация наблюдателей данных).
  • Начало работы с компонентами, которые должны быть активны только когда Activity на экране.

onResume()

Activity становится активной и взаимодействующей с пользователем. Она находится на вершине стека и получает фокус ввода. В этом методе:

  • Активизируются или перезапускаются непрерывные процессы (например, анимации).
  • Запускаются системные компоненты, требующие активности (камера, датчики).

onPause()

Вызывается, когда система готовится запустить другую Activity или частично закрыть текущую (например, появление диалога). Это сигнал к приостановке активных операций:

  • Сохранение измененных данных.
  • Освобождение системных ресурсов (например, камеры).
  • Приостановка анимаций или тяжелых вычислений.

Важно: onPause() не гарантирует быстрого завершения Activity, поэтому длительные операции здесь нежелательны.

onStop()

Activity полностью невидима для пользователя. Здесь можно выполнять более тяжелые операции по освобождению ресурсов:

  • Отмена сетевых запросов.
  • Отключение от наблюдателей данных или сервисов.
  • Сохранение данных в постоянное хранилище.

onDestroy()

Финальный коллбэк перед уничтожением объекта Activity. Вызывается в двух случаях:

  1. Завершение работы Activity по finish().
  2. Системное уничтожение для освобождения ресурсов (например, при нехватке памяти).

Здесь необходимо полное освобождение всех ресурсов:

  • Отмена всех pending задач.
  • Отключение всех callback и listener.
  • Освобождение ссылок на внешние ресурсы.
override fun onDestroy() {
    super.onDestroy()
    // Отмена всех RxJava disposable
    disposables.clear()
    // Отключение слушателей
    someListener?.removeListener()
}

onRestart()

Специальный коллбэк, вызываемый перед onStart() при возвращении Activity из состояния onStop() (но не из onDestroy()). Используется для подготовки к повторному показу.

Восстановление состояния: onSaveInstanceState() и onRestoreInstanceState()

Помимо основных коллбэков, существуют методы для сохранения и восстановления UI состояния при временном уничтожении Activity (например, при повороте экрана).

  • onSaveInstanceState(Bundle outBundle): вызывается перед onStop() (или перед onDestroy() при определенных условиях). Здесь сохраняются временные данные UI.
override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString("KEY_TEXT", textView.text.toString())
}
  • onRestoreInstanceState(savedInstanceState: Bundle): вызывается после onStart(), предоставляя восстановленный Bundle. Альтернативно, данные можно читать в onCreate().

Практические рекомендации по использованию коллбэков

  • Инициализация и освобождение должны быть симметричными: что создано в onCreate()/onStart() — освобождается в onStop()/onDestroy().
  • Минимизация работы в onPause(): этот метод должен выполнять только критически важные, быстрые операции сохранения.
  • Разделение ответственности: долгосрочные данные сохраняются в постоянное хранилище (база данных, SharedPreferences), временное UI состояние — в onSaveInstanceState().
  • Учет конфигурационных изменений: поворот экрана вызывает полный цикл уничтожения-создания, поэтому важные данные должны сохраняться.

Понимание и корректная обработка коллбэков жизненного цикла — фундаментальный навык Android разработчика, напрямую влияющий на пользовательский опыт, стабильность и эффективность приложения.

Что происходит в коллбэках жизненного цикла Activity | PrepBro