Жизненный цикл Activity приложения: базовые принципы и понятия

Статья тестировщика «ITQ Group» Леонида Галочкина.

a13e3549266ae6aac9d4e92866427b35.png

Привет! Меня зовут Леонид, я работаю тестировщиком в компании ITQ Group.
В этой статье хочу кратко и доступно описать жизненный цикл Activity мобильных приложений на Android. 

Понимание принципов работы activity позволяет понять логику работы мобильных приложений, разрабатывать тест-кейсы разного уровня, готовить тестовую документацию. Принципы activity можно игнорировать, например, при тестировании UI приложения или при e2e-тестировании, но для полного тестирования МП знать их необходимо. 

Что такое жизненный цикл Activity

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

Activity — это основная часть любого Android приложения, с которой взаимодействует пользователь. То есть, это сам интерфейс или экран, на котором происходит взаимодействие в определенном состоянии. В Activity располагаются всевозможные элементы: кнопки, фрагменты, изображения и другие элементы View. View — это визуальный интерфейс приложения в том или ином статусе, с которым взаимодействует пользователь.

Живым примером принципов активити является работа приложения от момента его вызова на устройство, прохождения определенного флоу, закрытия приложения и появления старта того же юзер-флоу в момент, когда вы заново открываете приложение. 

71c0cb8f8fdab8932e86b5c547fa7472.png

Состояния Activity и коллбэки

Activity может быть:

  • видимым пользователю;

  • свернутым (работать в фоне, но не отображаться);  

  • закрытым или уничтоженным системой. 

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

Вот как выглядит жизненный цикл Activity

Вот как выглядит жизненный цикл Activity

Когда activity переходит из одного состояния в другое, система Android делает вызов методов (callback) обратного жизненного цикла activity, и параллельно генерирует уведомление о конкретной стадии после каждого действия.
Например:

  • OnCreate (). Вызывается при создании activity. В нем появляется интерфейс, код самого макета, кнопки и другие функциональные элементы формы.

  • OnResume (). Activity на экране, с ним можно взаимодействовать, оно в фокусе.

  • OnPause (). Само приложение activity находится в состоянии паузы, не в фокусе. С ним нельзя взаимодействовать, но частично можно видеть на экране. Например, в виде диалогового окна, под другим activity. 

  • OnStop (). В этом методе activity переходит в состояние Stopped, то есть полностью невидима. В методе onStop следует освобождать используемые ресурсы, которые не нужны пользователю, когда он не взаимодействует с activity. При этом в памяти устройства остаются все элементы интерфейса, с которыми в дальнейшем можно взаимодействовать. Например, в случае, если в поле приложения был введен текст в момент когда activity было в статусе OnResume (), а затем активити было переведено в статус OnStop () и обратно в OnResume (), введенный текст сохранится. 

  • onDestroy (). Завершение работы activity происходит посредством вызова метода onDestroy, который возникает или при вызове finish (), или если система решит убить activity в силу конфигурационных причин (например, поворот экрана или при многооконном режиме).

Схема переходов вышеописанных методов.

Схема переходов вышеописанных методов.

Покажу на примере последовательные действия на мобильном устройстве, связанные с созданием и изменениями activity. Для этого я использую стандартное приложение Google Chrome. 

  1. На первом экране отсутствует какая-либо activity, связанная с этим  приложением.

    a5cdc3b5c4b726cb3a71cbd66e68cead.png
  2. Нажимаем на иконку приложения Google Chrome — инициируем отправку метода onCreate (). Появлении activity на экране вызываем метод onStart ().

    3772f7131c22e3a3f7b8d7e694188c78.png
  3. При появлении activity на экране и возможности с ним взаимодействовать вызываем метод onResume ().

    04a68929cff491fd9f48bd1052772c77.png

Схемы вызовов activity в зависимости от действий в приложении


Для лучшего понимания здесь представлена таблица со схемами вызовов методов activity в зависимости от определенных действий.  

155313c975a944b0ba453f1e30cd3a5a.png

Очередность вызовов callback методов

Есть также очередность, в соответствии с которой callback методы вызываются. Зависит она от того, что именно делает пользователь с приложением.

  • После onCreate () — onStart ()

  • После onRestart () — onStart ()

  • После onStart () — onResume () или onStop ()

  • После onResume () — onPause ()

  • После onPause () — onResume () или onStop ()

  • После onStop () — onRestart () или onDestroy ()

  • После onDestroy () — ничего

Вот и всё. В статье мы разобрали основы принципов activity, и я надеюсь, это поможет начинающим специалистам познакомиться и разобраться с логикой работы приложения в любом из показанных статусов.

© Habrahabr.ru