Жизненный цикл Fragment

onAttach()        // 1. Фрагмент прикрепляется к активности
    |
onCreate()       // 2. Инициализация фрагмента
    |
onCreateView()   // 3. Создание представления фрагмента
    |
onViewCreated()  // 4. Настройка UI после создания представления
    |
onStart()        // 5. Фрагмент становится видимым для пользователя
    |
onResume()       // 6. Фрагмент активен и может взаимодействовать
    |
onPause()        // 7. Фрагмент теряет фокус, но еще виден
    |
onStop()         // 8. Фрагмент больше не виден
    |
onDestroyView()  // 9. Уничтожение представления фрагмента
    |
onDestroy()      // 10. Уничтожение фрагмента
    |
onDetach()       // 11. Окончательное отделение фрагмента от активности

Жизненный цикл

Для управления ЖЦ фрагмент имплементирует LifecycleOwner (получить объект Lifecycle можно изнутри).

  • INITIALIZED (Когда фрагмент только создан, но не привязан к Activity)
  • CREATED
  • STARTED
  • RESUMED
  • DESTROYED

ЖЦ и коллбеки - создание

Fragment Created

Фрагмент добавлен в FragmentManager и метод onAttach вызван. View еще не создана, у фрагмента вызван метод onCreate(savedInstanceState: Bundle?). В первый вызов savedInstanceState всегда null, но при пересоздании уже не null, даже если не был перегружен метод onSaveInstanceState()

Фрагмент создан и View initialized

Fragment's view lifecycle создан когда фрагмент создает экземпляр View с помощью метода onCreateView или при передаче layoutId в конструкторе. Параметр getViewLifecycleOwnerLiveData обновляется с новым LifecycleOwner, относящимся к вьюшке фрагмента.

Fragment.started & View.Started

У некоторых компонентов типа ViewPager2 максимальный Lifecycle - STARTED

Fragment & View RESUMED

Когда фрагмент видимый, все Animator и Transition эффекты закончены и фрагмент готов для взаимодействия с пользователем. Lifecycle = RESUMED и onResume вызван.

ЖЦ и коллбеки - уничтожение

Fragment and View STARTED

Пользователь начинает покидать фрагмент, но он еще видим для пользователя. Вызывается метод onPause()

Fragment and VIEW CREATED

Фрагмент не видим для пользователя, Lifecycle = CREATED и вызывается метод onStop.

Fragment CREATED and View DESTROYED

После того как все анимации и переходы завершены, fragment's view отсоединена от window, fragment's view lifecycle = DESTROYED. Фрагмент выполняет onDestroyView(). Это последняя точка для fragment's view lifecycle, и getViewLifecycleOwnerLiveData() == null

Fragment DESTROYED

Если фрагмент удален или его FragmentManager уничтожен, Lifecycle = DESTROYED

ЖЦ фрагмента и его View

Fragment LifeCycle Fragment Callback View Lifecycle
CREATED
CREATED
CREATED
CREATED
onCreate()
onCreateView()
onViewCreated()
onViewStateRestored()
INITIALIZED
INITIALIZED
INITIALIZED
CREATED
STARTED onStart() STARTED
RESUMED onResume() RESUMED
STARTED onPause() STARTED
CREATED
CREATED
CREATED
onStop()
onSaveInstanceState()
onDestroyView()
CREATED
CREATED
DESTROYED
DESTROYED onDestroy -

// NB: onViewStateRestored(savedInstanceState: Bundle?) - вызывается когда все saved states восстановдены в View иерархию фрагмента. Это может быть использовано для инициализации предыдущего состоянию вьюшек, например, отметки чекбоксов и проч.