Жизненный цикл Андроид-приложений | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Python Developer. Basic Специализация Python Developer
-25%
iOS Developer. Professional Архитектура и шаблоны проектирования Scala-разработчик Python Developer. Professional JavaScript Developer. Professional
-20%
Программист С
-20%
Специализация Fullstack developer
-25%
Java Developer. Professional
-20%
Специализация Android-разработчик
-25%
Node.js Developer
-20%
Специализация Java-разработчик
-25%
PHP Developer. Basic
-20%
C# Developer. Professional
-20%
Symfony Framework
-20%
PHP Developer. Professional
-20%
Flutter Mobile Developer
-20%
Буткемп Java
-20%
Kotlin Backend Developer
-20%
Web-разработчик на Python NoSQL Разработчик на Spring Framework Базы данных PostgreSQL Vue.js разработчик Специализация Java и Базы данных Подготовка к сертификации Oracle Java Programmer (OCAJP) Unity Game Developer. Professional C++ Developer. Basic Unreal Engine Technical Game Design
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Жизненный цикл Андроид-приложений

Операционная система Android проектировалась с учётом расширения возможностей пользователей и с целью, чтобы приложения были интуитивно понятны. В процессе эксплуатации девайса пользователь может поворачивать экран, переключаться на другие задачи, отвечать на уведомления и т. д. И после обработки какого-нибудь события пользователь может без проблем продолжить работу с ранее открытым приложением.

Чтобы всё это обеспечить, разработчик должен понимать, как происходит управление основными жизненными циклами компонентов: активностями, фрагментами, сервисами, непосредственно приложением и т. п. Ведь в процессе своей работы компонент проходит через ряд состояний, определяемых его жизненным циклом. Такие переходы сопровождаются системными уведомлениями через методы обратного вызова (callbacks).

Что же, давайте посмотрим на жизненный цикл Андроид-приложений. Для удобства восприятия вы найдёте диаграммы, описывающие поведение в Android P/Jetpack 1.0. В большинстве случаев речь идёт о дефолтных сценариях поведения (если не указано иное). Все представленные диаграммы доступны для быстрого ознакомления в репозитории на GitHub.

Жизненный цикл одной активности

Сценарий № 1: приложение завершается и перезапускается

Источники: — пользователь нажал кнопку «Back»; — вызван метод Activity.finish().

Простейший сценарий ниже показывает, что происходит, если приложение с одной активностью завершается, а потом заново запускается пользователем:

1_U_j3OP74jrPFoNvO2i7XzQ_1-20219-6f3d47.png

Управление состоянием: — onSaveInstanceState() не вызывается (так как активность завершается, сохранять её состояние не нужно); — onCreate() не принимает Bundle (т. к. предыдущая активность завершилась, восстановление не требуется).

Сценарий № 2: пользователь покидает приложение (переходит из него)

Источники: — пользователь нажимает кнопку «Home»; — пользователь переключается на другое приложение (посредством кнопки «Overview», путём ответа на уведомление, в связи с приёмом входящего вызова и так далее).

1_3qxYnT2vRwrQVORi9mfUhw_1-20219-501002.png

В результате системная активность остановится, однако система не будет сразу же завершать процесс.

Управление состоянием

Когда активность переходит в остановленное состояние, происходит системный вызов onSaveInstanceState(), что необходимо в целях сохранения состояния приложения на тот случай, если впоследствии процесс завершится.

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

Сценарий № 3: изменения конфигурации

Источники: — конфигурация меняется, к примеру, в результате поворота экрана; — пользователь меняет размер окна в мультиоконном режиме.

1_DCo7awxJ3KhnW88h365vhA_1-20219-4161c3.png

Управление состоянием

Изменения конфигурации не должны влиять на процесс взаимодействия пользователя с девайсом. То есть пользователь должен продолжить свою работу без заминок. При этом: — происходит уничтожение предыдущей активности, причём состояние этой активности сохраняется и передаётся новой; — передаётся один и тот же Bundle в onCreate() и onRestoreInstanceState().

Сценарий № 4: системная остановка приложения

Источники: — происходит вход в мультиоконный режим (API 24+) с последующей потерей фокуса; — другое приложение отчасти перекрывает текущее (диалог покупки или авторизации, запрос разрешения); — появится выбор Intent, допустим, появится диалоговое окно с кнопкой «Поделиться».

1_j3blnCW082yMbQe5fkjMMg_1-20219-3306a9.png

Этот сценарий нельзя отнести к следующим случаям: — диалоги в том же приложении. Отображение DialogFragment либо AlertDialog не приведёт к остановке активности; — уведомления. Не остановится активность и в том случае, если пользователь получает уведомления или открывает панель уведомлений.

Источник — «The Android Lifecycle cheat sheet — part I: Single Activities».

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
🎄 Новогодняя распродажа!
Максимальная скидка на курсы в декабре! Количество мест ограничено.