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

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

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

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

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

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

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

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

Activity может быть:

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

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

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

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. 

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


  1. dyadyaSerezha
    06.04.2024 02:12
    +1

    Очень корявый язык изложения. Где activity это класс, а где просто статус приложения, совершенно не ясно. Иногда в тексте activity, иногда активити.. Почему, зачем? Чем активити отличается от приложения и его состояния, так и не понял. И т.д.


  1. ilyamodder
    06.04.2024 02:12
    +1

    Так это все в официальной доке написано на первых страницах. В чем ценность статьи?