Жизненный цикл Activity приложения: базовые принципы и понятия
Статья тестировщика «ITQ Group» Леонида Галочкина.
Привет! Меня зовут Леонид, я работаю тестировщиком в компании ITQ Group.
В этой статье хочу кратко и доступно описать жизненный цикл Activity мобильных приложений на Android.
Понимание принципов работы activity позволяет понять логику работы мобильных приложений, разрабатывать тест-кейсы разного уровня, готовить тестовую документацию. Принципы activity можно игнорировать, например, при тестировании UI приложения или при e2e-тестировании, но для полного тестирования МП знать их необходимо.
Что такое жизненный цикл Activity
Жизненный цикл Activity часто путают с жизненным циклом приложения вообще, что неверно.
Activity — это основная часть любого Android приложения, с которой взаимодействует пользователь. То есть, это сам интерфейс или экран, на котором происходит взаимодействие в определенном состоянии. В Activity располагаются всевозможные элементы: кнопки, фрагменты, изображения и другие элементы View. View — это визуальный интерфейс приложения в том или ином статусе, с которым взаимодействует пользователь.
Живым примером принципов активити является работа приложения от момента его вызова на устройство, прохождения определенного флоу, закрытия приложения и появления старта того же юзер-флоу в момент, когда вы заново открываете приложение.
Состояния 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.
На первом экране отсутствует какая-либо activity, связанная с этим приложением.
Нажимаем на иконку приложения Google Chrome — инициируем отправку метода onCreate (). Появлении activity на экране вызываем метод onStart ().
При появлении activity на экране и возможности с ним взаимодействовать вызываем метод onResume ().
Схемы вызовов activity в зависимости от действий в приложении
Для лучшего понимания здесь представлена таблица со схемами вызовов методов activity в зависимости от определенных действий.
Очередность вызовов callback методов
Есть также очередность, в соответствии с которой callback методы вызываются. Зависит она от того, что именно делает пользователь с приложением.
После onCreate () — onStart ()
После onRestart () — onStart ()
После onStart () — onResume () или onStop ()
После onResume () — onPause ()
После onPause () — onResume () или onStop ()
После onStop () — onRestart () или onDestroy ()
После onDestroy () — ничего
Вот и всё. В статье мы разобрали основы принципов activity, и я надеюсь, это поможет начинающим специалистам познакомиться и разобраться с логикой работы приложения в любом из показанных статусов.