Жизненный цикл Android приложения

Мы знаем, как ведут себя приложения на таких платформах как Windows, Linux или Mac. После запуска программы мы можем свернуть и развернуть ее тогда, когда это потребуется, при этом программа полностью сохранит свое состояние (конечно, при условии, что не произойдет системный сбой). Если говорить о Android, то здесь ситуация совершенно иная и мы в значительно меньшей степени можем контролировать протекаение жизни приложения. Поэтому, прежде чем приступать к процессу разработки, мы должны полностью знать и понимать жизненный цикл Activity в Android приложениях.

Activity может находиться в 4-х состояниях, описанных ниже:




  1. Состояние активности

    Activity находится в данном состоянии, когда находится на экране устройства, полностью видна пользователю и имеет на себе фокус.

  2. Состояние паузы

    В состоянии паузы Activity частично видна пользователю, но не имеет фокуса и не является активной. Это состояние возникает, когда текущее Activity перекрывается другой, не закрывающей весь кран или имеющей прозрачность. Приостановленная Activity полностью «жива», но может быть выгружена системой при нехватке памяти, если освободить память другим способом не удается.

  3. Состояние остановки

    Activity переходит в это состояние, когда долго невидна на экране. Другая Activity находится поверх и полностью закрывает ее. В состоянии остановки Activity также остается
    «живой», но имеет больше шансов быть выгруженной при нехватке памяти.

  4. Activity уничтожена

    Activity считается уничтоженной, если она больше не существует в памяти устройства. Либо Activity попросту еще не была запущена или прекратила свою работу по описанным выше причинам.

Диаграмма жизненного цикла Android приложения

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

В серых прямоугольниках показаны callback методы, которые вызываются прежде, чем Activity перейдет в какое-либо состояние.

Данную диаграмму демонстрирующую протекание жизненного цикла Android приложения, можно описать следующим образом:

  • Когда мы запускаем какую-либо Activity, в первую очередь вызывается метод onCreate(). Это тот метод, в котором мы создаем пользовательский интерфейс и инициализируем данные. Для восстановления состояния UI данный метод принимает объект типа Bundle в качестве параметра.
  • Метод onStart() вызывается перед тем, как пользователь увидит Activity. Помните, что в этот момент Activity еще неактивна.
  • При вызове метода onResume() Activity становится видимой для пользователя и готова к взаимодействию с ним. В данный момент Activity запущена, активна и находится в самом верху стэка.
  • Метод onPause() будет вызван в том случае, когда система собирается вернуть на передний план другую Activity или когда пользователю необходимо перейти к другим частям системы. Это последний метод, который гарантировано будет вызван до того, как Activity может быть уничтожена системой. Иными словами, существует вероятность того, что в состоянии паузы Activity может быть уничтожена системой без предварительного вызова каких-либо других методов. Поэтому очень важно при вызове данного метода сохранить пользовательские настройки и важные данные.

    По умолчанию Activity может оставаться в состоянии паузы если:

    • Пользователь нажал кнопку «Home».
    • Другая Activity или уведомление находящиеся сверху, не полностью закрывают Activity, находящуюся под ними.
    • Устройство перешло в режим сна.

    Есть три возможных варианта выхода Activity из состояния паузы:

    1. Пользователь закрывает новую Activity или уведомление и Activity, находящаяся в состоянии паузы, переходит в статус запущенной/активной посредством вызова метода onResume().
    2. Activity выгружена системой ввиду острой нехватки памяти. В данном случае, перед тем как Activity будет уничтожена, никакие методы не вызываются. Необходимо полностью перезапустить ее, вызвав метод onCreate() и восстановить предыдущее состояние с помощью Bundle объекта.
  • Во всех остальных случаях Activity переходит в состояние остановки с вызовом метода onStop(). Данное событие возникает по умолчанию в тех случаях, когда пользователь нажимает кнопку «Back» или новая Activity полностью закрывает текущую.
  • Есть три возможных сценария выхода Activity из состояние остановки:

    1. Система выгружает приложение из памяти для освобождения ресурсов. Activity в состоянии остановки имеет более высокие шансы быть уничтоженной системой, нежели в состоянии паузы. В том случае, если это произойдет, потребуется начать цикл с вызова onCreate().
    2. Activity перезапущена вызовом onRestart(), или вызовом onStart() и onResume() методов, что в свою очередь означает, что пользователь снова вернулся к Activity. В последнем случае пользовательский интерфейс сохраняет свое состояние и не требует восстановления.
    3. Вызван метод onDestroy(), после чего Activity уничтожается. Это последний метод, который мы можем вызвать до того, как Activity будет уничтожена. Также данный метод может быть вызван в том случае, если Activity завершила свою работу или была уничтожена системой.

Циклы жизненного цикла Android Activity

Анализируя диаграмму работы Android Activity, мы можем выделить три цикла и их колбэк методы, существующие для каждой Activity.

  • Весь жизненный цикл. Это цикл между первым вызовом метода onCreate() и завершающим вызовом метода onCreate(). Мы создаем все глобальные ресурсы такие, как например лайаут, глобальные переменные в методе onCreate(), а освобождаем ресурсы в методе onDestroy().
  • Видимый жизненный цикл. Этот цикл протекает между вызовами методов onStart() и onStop(). Activity видима для пользователя и может быть готова или не готова для взаимодействия с ним. В течении данного цикла Activity поддерживает свое состояние.
  • Цикл переднего плана. Он начинается с вызова onResume() и завершается с вызовом метода onPause(). В течении всего цикла Activity полностью видна пользователю, находится поверх всех остальных Activity, и готова к взаимодействию с пользователем.

Оригинал статьи — Android Activity Lifecycle – Android Key Concepts

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

  1. OlegZubov

    Ошибка в заголовке
    ЖИНЕННЫЙ

Добавить комментарий для Мурашов Олег Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *