0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Операционная система Android проектировалась с учётом расширения возможностей пользователей и с целью, чтобы приложения были интуитивно понятны. В процессе эксплуатации девайса пользователь может поворачивать экран, переключаться на другие задачи, отвечать на уведомления и т. д. И после обработки какого-нибудь события пользователь может без проблем продолжить работу с ранее открытым приложением.</p>
1
<p>Операционная система Android проектировалась с учётом расширения возможностей пользователей и с целью, чтобы приложения были интуитивно понятны. В процессе эксплуатации девайса пользователь может поворачивать экран, переключаться на другие задачи, отвечать на уведомления и т. д. И после обработки какого-нибудь события пользователь может без проблем продолжить работу с ранее открытым приложением.</p>
2
<p>Чтобы всё это обеспечить, разработчик должен понимать, как происходит управление основными жизненными циклами компонентов: активностями, фрагментами, сервисами, непосредственно приложением и т. п. Ведь в процессе своей работы компонент проходит через ряд состояний, определяемых его жизненным циклом. Такие переходы сопровождаются системными уведомлениями через методы обратного вызова (callbacks).</p>
2
<p>Чтобы всё это обеспечить, разработчик должен понимать, как происходит управление основными жизненными циклами компонентов: активностями, фрагментами, сервисами, непосредственно приложением и т. п. Ведь в процессе своей работы компонент проходит через ряд состояний, определяемых его жизненным циклом. Такие переходы сопровождаются системными уведомлениями через методы обратного вызова (callbacks).</p>
3
<p>Что же, давайте посмотрим на жизненный цикл Андроид-приложений. Для удобства восприятия вы найдёте диаграммы, описывающие поведение в Android P/Jetpack 1.0. В большинстве случаев речь идёт о дефолтных сценариях поведения (если не указано иное). Все представленные диаграммы доступны для быстрого ознакомления<a>в репозитории на GitHub</a>.</p>
3
<p>Что же, давайте посмотрим на жизненный цикл Андроид-приложений. Для удобства восприятия вы найдёте диаграммы, описывающие поведение в Android P/Jetpack 1.0. В большинстве случаев речь идёт о дефолтных сценариях поведения (если не указано иное). Все представленные диаграммы доступны для быстрого ознакомления<a>в репозитории на GitHub</a>.</p>
4
<h2>Жизненный цикл одной активности</h2>
4
<h2>Жизненный цикл одной активности</h2>
5
<h3>Сценарий № 1: приложение завершается и перезапускается</h3>
5
<h3>Сценарий № 1: приложение завершается и перезапускается</h3>
6
<p><strong>Источники</strong>: - пользователь нажал кнопку "Back"; - вызван метод Activity.finish().</p>
6
<p><strong>Источники</strong>: - пользователь нажал кнопку "Back"; - вызван метод Activity.finish().</p>
7
<p>Простейший сценарий ниже показывает, что происходит, если приложение с одной активностью завершается, а потом заново запускается пользователем:</p>
7
<p>Простейший сценарий ниже показывает, что происходит, если приложение с одной активностью завершается, а потом заново запускается пользователем:</p>
8
<p><strong>Управление состоянием</strong>: - onSaveInstanceState() не вызывается (так как активность завершается, сохранять её состояние не нужно); - onCreate() не принимает Bundle (т. к. предыдущая активность завершилась, восстановление не требуется).</p>
8
<p><strong>Управление состоянием</strong>: - onSaveInstanceState() не вызывается (так как активность завершается, сохранять её состояние не нужно); - onCreate() не принимает Bundle (т. к. предыдущая активность завершилась, восстановление не требуется).</p>
9
<h3>Сценарий № 2: пользователь покидает приложение (переходит из него)</h3>
9
<h3>Сценарий № 2: пользователь покидает приложение (переходит из него)</h3>
10
<p><strong>Источники</strong>: - пользователь нажимает кнопку "Home"; - пользователь переключается на другое приложение (посредством кнопки "Overview", путём ответа на уведомление, в связи с приёмом входящего вызова и так далее).</p>
10
<p><strong>Источники</strong>: - пользователь нажимает кнопку "Home"; - пользователь переключается на другое приложение (посредством кнопки "Overview", путём ответа на уведомление, в связи с приёмом входящего вызова и так далее).</p>
11
<p>В результате системная активность остановится, однако система не будет сразу же завершать процесс.</p>
11
<p>В результате системная активность остановится, однако система не будет сразу же завершать процесс.</p>
12
<p><strong>Управление состоянием</strong></p>
12
<p><strong>Управление состоянием</strong></p>
13
<p>Когда активность переходит в остановленное состояние, происходит системный вызов onSaveInstanceState(), что необходимо в целях сохранения состояния приложения на тот случай, если впоследствии процесс завершится.</p>
13
<p>Когда активность переходит в остановленное состояние, происходит системный вызов onSaveInstanceState(), что необходимо в целях сохранения состояния приложения на тот случай, если впоследствии процесс завершится.</p>
14
<p>Однако предполагается, что активность всё же завершена не будет, поэтому процесс вместе со всем своим состоянием<strong>остаётся резидентным в памяти</strong>. При возобновлении активности её состояние будет полностью доступно, а значит повторная инициализация ранее созданных компонентов не потребуется.</p>
14
<p>Однако предполагается, что активность всё же завершена не будет, поэтому процесс вместе со всем своим состоянием<strong>остаётся резидентным в памяти</strong>. При возобновлении активности её состояние будет полностью доступно, а значит повторная инициализация ранее созданных компонентов не потребуется.</p>
15
<h3>Сценарий № 3: изменения конфигурации</h3>
15
<h3>Сценарий № 3: изменения конфигурации</h3>
16
<p><strong>Источники</strong>: - конфигурация меняется, к примеру, в результате поворота экрана; - пользователь меняет размер окна в мультиоконном режиме.</p>
16
<p><strong>Источники</strong>: - конфигурация меняется, к примеру, в результате поворота экрана; - пользователь меняет размер окна в мультиоконном режиме.</p>
17
<p><strong>Управление состоянием</strong></p>
17
<p><strong>Управление состоянием</strong></p>
18
<p>Изменения конфигурации не должны влиять на процесс взаимодействия пользователя с девайсом. То есть пользователь должен продолжить свою работу без заминок. При этом: - происходит уничтожение предыдущей активности, причём состояние этой активности сохраняется и передаётся новой; - передаётся один и тот же Bundle в onCreate() и onRestoreInstanceState().</p>
18
<p>Изменения конфигурации не должны влиять на процесс взаимодействия пользователя с девайсом. То есть пользователь должен продолжить свою работу без заминок. При этом: - происходит уничтожение предыдущей активности, причём состояние этой активности сохраняется и передаётся новой; - передаётся один и тот же Bundle в onCreate() и onRestoreInstanceState().</p>
19
<h3>Сценарий № 4: системная остановка приложения</h3>
19
<h3>Сценарий № 4: системная остановка приложения</h3>
20
<p><strong>Источники</strong>: - происходит вход в мультиоконный режим (API 24+) с последующей потерей фокуса; - другое приложение отчасти перекрывает текущее (диалог покупки или авторизации, запрос разрешения); - появится выбор Intent, допустим, появится диалоговое окно с кнопкой "Поделиться".</p>
20
<p><strong>Источники</strong>: - происходит вход в мультиоконный режим (API 24+) с последующей потерей фокуса; - другое приложение отчасти перекрывает текущее (диалог покупки или авторизации, запрос разрешения); - появится выбор Intent, допустим, появится диалоговое окно с кнопкой "Поделиться".</p>
21
<p>Этот сценарий нельзя отнести к следующим случаям: - диалоги в том же приложении. Отображение DialogFragment либо AlertDialog не приведёт к остановке активности; - уведомления. Не остановится активность и в том случае, если пользователь получает уведомления или открывает панель уведомлений.</p>
21
<p>Этот сценарий нельзя отнести к следующим случаям: - диалоги в том же приложении. Отображение DialogFragment либо AlertDialog не приведёт к остановке активности; - уведомления. Не остановится активность и в том случае, если пользователь получает уведомления или открывает панель уведомлений.</p>
22
<p><em>Источник - "<a>The Android Lifecycle cheat sheet - part I: Single Activities</a>".</em></p>
22
<p><em>Источник - "<a>The Android Lifecycle cheat sheet - part I: Single Activities</a>".</em></p>
23
23