Статья тестировщика "ITQ Group" Леонида Галочкина.
Привет! Меня зовут Леонид, я работаю тестировщиком в компании ITQ Group.
В этой статье хочу кратко и доступно описать жизненный цикл Activity мобильных приложений на Android.
Понимание принципов работы activity позволяет понять логику работы мобильных приложений, разрабатывать тест-кейсы разного уровня, готовить тестовую документацию. Принципы activity можно игнорировать, например, при тестировании UI приложения или при e2e-тестировании, но для полного тестирования МП знать их необходимо.
Что такое жизненный цикл Activity
Жизненный цикл Activity часто путают с жизненным циклом приложения вообще, что неверно.
Activity — это основная часть любого Android приложения, с которой взаимодействует пользователь. То есть, это сам интерфейс или экран, на котором происходит взаимодействие в определенном состоянии. В Activity располагаются всевозможные элементы: кнопки, фрагменты, изображения и другие элементы View. View – это визуальный интерфейс приложения в том или ином статусе, с которым взаимодействует пользователь.
Живым примером принципов активити является работа приложения от момента его вызова на устройство, прохождения определенного флоу, закрытия приложения и появления старта того же юзер-флоу в момент, когда вы заново открываете приложение.
Состояния Activity и коллбэки
Activity может быть:
видимым пользователю;
свернутым (работать в фоне, но не отображаться);
закрытым или уничтоженным системой.
Activity берет начало в момент старта приложения. Система дает такому приложению высокий приоритет. Дальнейшее состояние activity помогает понять, что с ним делать, в какой момент освободить ресурсы, связанные с ним, и так далее. Эта приоритезации позволяет, например, в некоторых случаях не блокировать входящие звонки.
Когда activity переходит из одного состояния в другое, система Android делает вызов методов (callback) обратного жизненного цикла activity, и параллельно генерирует уведомление о конкретной стадии после каждого действия.
Например:
OnCreate(). Вызывается при создании activity. В нем появляется интерфейс, код самого макета, кнопки и другие функциональные элементы формы.
OnStart(). Вызывается при появлении 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, и я надеюсь, это поможет начинающим специалистам познакомиться и разобраться с логикой работы приложения в любом из показанных статусов.
Комментарии (2)
ilyamodder
06.04.2024 02:12+1Так это все в официальной доке написано на первых страницах. В чем ценность статьи?
dyadyaSerezha
Очень корявый язык изложения. Где activity это класс, а где просто статус приложения, совершенно не ясно. Иногда в тексте activity, иногда активити.. Почему, зачем? Чем активити отличается от приложения и его состояния, так и не понял. И т.д.