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

Курсы

Программирование
iOS Developer. Basic
-23%
Python Developer. Professional
-13%
Golang Developer. Professional
-17%
Python Developer. Basic
-16%
iOS Developer. Professional
-13%
C# ASP.NET Core разработчик
-18%
Unity Game Developer. Professional
-11%
React.js Developer
-12%
Android Developer. Professional
-7%
Software Architect
-12%
C++ Developer. Professional
-8%
Разработчик C#
-8%
Backend-разработчик на PHP
-8%
Архитектура и шаблоны проектирования
-12%
Программист С Разработчик на Spring Framework MS SQL Server Developer AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Vue.js разработчик VOIP инженер Нереляционные базы данных Супер - интенсив по паттернам проектирования Супер-практикум по использованию и настройке GIT IoT-разработчик Advanced Fullstack JavaScript developer Супер-интенсив Azure
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK
-17%
DevOps практики и инструменты
-18%
Архитектор сетей
-21%
Инфраструктурная платформа на основе Kubernetes
-22%
Супер-интенсив «IaC Ansible»
-16%
Супер-интенсив по управлению миграциями (DBVC)
-16%
Administrator Linux. Professional
-5%
Administrator Linux.Basic
-10%
Супер-интенсив «ELK»
-10%
Базы данных Сетевой инженер AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах»
Специализации Курсы в разработке Подготовительные курсы
+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 комментариев
Для комментирования необходимо авторизоваться