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

Опишите жизненный цикл Activity в Android

2.0 Middle🔥 212 комментариев
#Жизненный цикл и навигация

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

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

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

Жизненный цикл Activity в Android

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

Основные состояния и методы жизненного цикла

Состояния Activity образуют упорядоченный граф. Вот ключевые методы, вызываемые системой:

  1. onCreate(): Инициализация. Вызывается при первом создании Activity. Здесь выполняется основная настройка: setContentView() для разметки, инициализация View, восстановление сохранённого состояния.

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // Восстановление данных, если они есть
        val restoredData = savedInstanceState?.getString("KEY")
        // Инициализация UI и логики
    }
    
  2. onStart(): Видимость. Activity становится видимым пользователю, но ещё не доступно для взаимодействия (не в фокусе). Хорошее место для регистрации широковещательных приёмников (BroadcastReceiver), обновляющих UI.

  3. onResume(): Фокус и взаимодействие. Activity выходит на передний план, получает фокус и становится полностью интерактивным. Здесь обычно запускаются анимации, камеры, датчики или другие ресурсы, требующиеся исключительно, когда пользователь активно работает с экраном.

  4. onPause(): Потеря фокуса. Вызывается, когда Activity теряет фокус, но остаётся частично видимой (например, при появлении диалога или прозрачной Activity). Все операции, связанные с UI, должны быть приостановлены. Важно выполнять здесь только быстрые операции, так как вызов onResume() следующей Activity блокируется до завершения этого метода.

  5. onStop(): Скрытие. Activity больше не видно пользователю. Это происходит, когда она полностью перекрыта другой Activity или пользователь перешёл в другое приложение. Здесь следует освобождать ресурсы, не нужные, когда приложение невидимо (например, отключать сетевые запросы, связанные только с этим экраном).

  6. onRestart(): Перезапуск. Вызывается перед onStart(), если Activity возвращается из состояния onStop(). Позволяет выполнить специфичную логику перезапуска.

  7. onDestroy(): Уничтожение. Финальный вызов перед уничтожением Activity. Вызывается либо при окончательном закрытии (пользователь нажал "Назад"), либо при уничтожении системой для экономии ресурсов. Здесь необходимо освобождать все оставшиеся ресурсы, чтобы избежать утечек памяти.

Управление конфигурацией и сохранение состояния

Ключевой сценарий — изменение конфигурации (поворот экрана, изменение языка). По умолчанию система уничтожает и пересоздаёт Activity. Для сохранения временных данных UI (например, текста в EditText) используется onSaveInstanceState().

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    // Сохраняем временные данные
    outState.putString("USER_INPUT", editText.text.toString())
}

Восстановление происходит в onCreate() или onRestoreInstanceState().

Практические рекомендации

  • Разделение ответственности: Не нагружайте методы жизненного цикла бизнес-логикой. Используйте архитектурные компоненты (ViewModel, LiveData), которые переживают изменения конфигурации.
  • Реакция на прерывания: Критичные операции (загрузка данных) в onPause()/onStop() должны быть приостановлены или корректно завершены.
  • Избегайте утечек памяти: Никогда не сохраняйте ссылки на Activity в статических полях или фоновых потоках с более длительным жизненным циклом. Используйте слабые ссылки (WeakReference) или корутины с правильно настроенной областью видимости (viewModelScope).
  • Логирование: Для отладки сложных сценариев используйте логирование в каждом методе.

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