photo-1239675

 

Lifecycle-aware components выполняют действия в ответ на изменение состояния жизненного цикла другого компонента, такого как действия и фрагменты. Эти компоненты помогают вам создавать более организованный и часто более легкий код, который легче поддерживать.

Общим шаблоном является реализация действий зависимых от компонентов в методах жизненного цикла действий и фрагментов. Однако этот паттерн приводит к плохой организации кода и распространению ошибок. Используя Lifecycle-aware components вы можете переместить код зависимых компонентов из методов жизненного цикла в  сами компоненты.

Пакет android.arch.lifecycle предоставляет классы и интерфейсы, которые позволяют создавать компоненты, ориентированные на жизненный цикл (lifecycle-aware), которые являются компонентами, которые могут автоматически корректировать свое поведение на основе текущего состояния жизненного цикла деятельности или фрагмента.

Примечание. Чтобы импортировать android.arch.lifecycle в свой проект Android, см. Добавление компонентов в проект.

Большинство компонентов приложения, которые определены в Android Framework, привязаны к жизненным циклам. Эти жизненные циклы управляются операционной системой или кодом framework, запущенным в вашем процессе. Они являются основой для работы Android, и ваше приложение должно их соблюдать. Если этого не сделать, это может привести к утечке памяти или даже к сбоям приложений.

Представьте, что у нас есть активность, которая показывает местоположение устройства на экране. Общая реализация может выглядеть следующим образом:

Несмотря на то, что этот образец выглядит отлично, в реальном приложении у вас получается слишком много вызовов которые управляют пользовательским интерфейсом и другими компонентами, и методы onStart() и onStop() становятся очень большими.

Более того, нет никакой гарантии, что компонент запускается до остановки действия или фрагмента. Это особенно актуально, если нам нужно выполнить долговременную операцию, например, некоторую проверку конфигурации в onStart(). Это может привести к состоянию гонки, когда метод onStop() заканчивается перед onStart(), сохраняя компонент дольше, чем это необходимо.

Пакет android.arch.lifecycle предоставляет классы и интерфейсы, которые помогут вам решить эти проблемы устойчивым и изолированным способом.

Lifecycle

Lifecycle это класс, который содержит информацию о состоянии жизненного цикла компонента (например, активность или фрагмент) и позволяет другим объектам наблюдать это состояние.

Lifecycle использует два основных перечисления (enumerations) для отслеживания состояния жизненного цикла для связанного с ним компонента.

Event

События жизненного цикла, которые отправляются из фреймворка и класса Lifecycle. Эти события соответсвуют событиям обратного вызова (callback events) в activities и фрагментах.

State

Текущее состояние компонента, отслеживаемого объектом Lifecycle.

lifecycle-states

Думайте о состояниях как узлах графа и событиях как о ребрах между этими узлами.

Класс может мониторить статус жизненного цикла компонентов, добавляя аннотации к методам.

Затем вы можете добавить наблюдателя, вызвав метод addObserver() класса Lifecycle и передать экземпляр вашего наблюдателя, как показано в следующем примере:

В приведенном выше примере объект myLifecycleOwner реализует интерфейс LifecycleOwner, который поясняется в следующем разделе.