Жизненный цикл Андроид-приложений
Операционная система Android проектировалась с учётом расширения возможностей пользователей и с целью, чтобы приложения были интуитивно понятны. В процессе эксплуатации девайса пользователь может поворачивать экран, переключаться на другие задачи, отвечать на уведомления и т. д. И после обработки какого-нибудь события пользователь может без проблем продолжить работу с ранее открытым приложением.
Чтобы всё это обеспечить, разработчик должен понимать, как происходит управление основными жизненными циклами компонентов: активностями, фрагментами, сервисами, непосредственно приложением и т. п. Ведь в процессе своей работы компонент проходит через ряд состояний, определяемых его жизненным циклом. Такие переходы сопровождаются системными уведомлениями через методы обратного вызова (callbacks).
Что же, давайте посмотрим на жизненный цикл Андроид-приложений. Для удобства восприятия вы найдёте диаграммы, описывающие поведение в Android P/Jetpack 1.0. В большинстве случаев речь идёт о дефолтных сценариях поведения (если не указано иное). Все представленные диаграммы доступны для быстрого ознакомления в репозитории на GitHub.
Жизненный цикл одной активности
Сценарий № 1: приложение завершается и перезапускается
Источники:
— пользователь нажал кнопку «Back»;
— вызван метод
Простейший сценарий ниже показывает, что происходит, если приложение с одной активностью завершается, а потом заново запускается пользователем:
Управление состоянием:
—
Сценарий № 2: пользователь покидает приложение (переходит из него)
Источники: — пользователь нажимает кнопку «Home»; — пользователь переключается на другое приложение (посредством кнопки «Overview», путём ответа на уведомление, в связи с приёмом входящего вызова и так далее).
В результате системная активность остановится, однако система не будет сразу же завершать процесс.
Управление состоянием
Когда активность переходит в остановленное состояние, происходит системный вызов
Однако предполагается, что активность всё же завершена не будет, поэтому процесс вместе со всем своим состоянием остаётся резидентным в памяти. При возобновлении активности её состояние будет полностью доступно, а значит повторная инициализация ранее созданных компонентов не потребуется.
Сценарий № 3: изменения конфигурации
Источники: — конфигурация меняется, к примеру, в результате поворота экрана; — пользователь меняет размер окна в мультиоконном режиме.
Управление состоянием
Изменения конфигурации не должны влиять на процесс взаимодействия пользователя с девайсом. То есть пользователь должен продолжить свою работу без заминок. При этом:
— происходит уничтожение предыдущей активности, причём состояние этой активности сохраняется и передаётся новой;
— передаётся один и тот же Bundle в
Сценарий № 4: системная остановка приложения
Источники: — происходит вход в мультиоконный режим (API 24+) с последующей потерей фокуса; — другое приложение отчасти перекрывает текущее (диалог покупки или авторизации, запрос разрешения); — появится выбор Intent, допустим, появится диалоговое окно с кнопкой «Поделиться».
Этот сценарий нельзя отнести к следующим случаям: — диалоги в том же приложении. Отображение DialogFragment либо AlertDialog не приведёт к остановке активности; — уведомления. Не остановится активность и в том случае, если пользователь получает уведомления или открывает панель уведомлений.
Источник — «The Android Lifecycle cheat sheet — part I: Single Activities».