Жизненный цикл фрагментов Андроид-приложений | OTUS
⚡ Открываем подписку на курсы!
Проходите параллельно 3 онлайн-курса в месяц по цене одного.
Подробнее

Курсы

Программирование
Flutter Mobile Developer Подготовка к сертификации Oracle Java Programmer (OCAJP)
-8%
Алгоритмы и структуры данных
-12%
Web-разработчик на Python
-11%
Архитектура и шаблоны проектирования
-14%
JavaScript Developer. Basic Супер-интенсив «СУБД в высоконагруженных системах»
-18%
iOS-разработчик. Базовый курс
-23%
Разработчик на Spring Framework
-23%
Python Developer. Basic
-16%
C# ASP.NET Core разработчик
-18%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-6%
Android Developer. Basic
-10%
C++ Developer. Professional Разработчик C# AWS для разработчиков Software Architect Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов Backend-разработка на Kotlin React.js Developer Разработчик Node.js Нереляционные базы данных Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Advanced Fullstack JavaScript developer
Инфраструктура
PostgreSQL
-10%
IoT-разработчик
-12%
Administrator Linux. Professional
-11%
Базы данных
-19%
Administrator Linux.Basic
-18%
Супер-интенсив «СУБД в высоконагруженных системах»
-18%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-6%
Сетевой инженер AWS для разработчиков Software Architect Reverse-Engineering. Professional CI/CD VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Жизненный цикл фрагментов Андроид-приложений

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

Сценарий № 1: запуск и завершение активности с фрагментом

1_ALMDBkuAAZ28BJ2abmvniA_1-1801-87bb99.png

Гарантируется, что вызов onCreate() активности выполнится раньше, чем вызов соответствующих вызовов фрагментов. Но противолежащие методы обратного вызова (onStart() и onResume()), выполняются параллельно, в результате чего порядок их вызовов не определён. К примеру, система сможет выполнить метод onStart() активности непосредственно перед методом onStart() фрагмента, однако затем выполнить метод onResume() фрагмента перед методом активности onResume(). Также стоит быть осторожным при управлении потоками выполнения и избегать состояния гонки.

Сценарий № 2: поворот активности с фрагментом

1_ukapaC23cOJSPUeZ0bUdCA_1-1801-4f7619.png

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

Как сохранение, так и восстановление фрагментов весьма похоже на восстановление/сохранение активностей. Различие в том, что у фрагментов отсутствует метод onRestoreInstanceState(), однако им доступен Bundle в методах onCreate(), onCreateView() и onActivityCreated().

Фрагменты можно сохранить, то есть при изменениях конфигурации активности станет применяться один и тот же экземпляр фрагмента.

Сценарий № 3: поворот активности с сохранённым фрагментом

1_hK_YRdty1GoafABfug_r4g_1-1801-bfa0f8.png

После осуществления поворота фрагмент не разрушится и не воссоздастся, так как после пересоздания активности применяется тот же самый экземпляр фрагмента, причём в onActivityCreated() объект состояния всё ещё доступен.

Не следует использовать сохраняемые фрагменты, если они не применяются в целях сохранения данных между изменениями конфигурации (речь идёт о не UI-фрагменте). Например, класс ViewModel из библиотеки Architecture Components реализован внутри именно так, однако он предоставляет более простой API.

Источник — «The Android Lifecycle cheat sheet — part III : Fragments».

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

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

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

Автор
0 комментариев
Для комментирования необходимо авторизоваться