grand_central_in_pictures (2)

Продолжение.

LifecycleOwner

LifecycleOwner это интерфейс с единственным методом, который означает, что класс имеет Lifecycle. Он имеет один метод getLifecycle(), который должен быть реализован классом.

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

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

Для примера отслеживания местоположений мы можем сделать наш класс MyLocationListener LifecycleObserver и затем инициализировать его с помощью Lifecycle в onCreate активности. Это позволяет классу MyLocationListener быть самодостаточным, а это означает, что логика реагирования на изменения статуса жизненного цикла объявляется в MyLocationListener вместо активности. Наличие отдельных компонентов для хранения собственной логики облегчает управление логикой действий и фрагментов.

Обычный вариант использования — избегать вызова определенных обратных вызовов, если Lifecycle не находится в хорошем состоянии прямо сейчас. Например, если обратный вызов запускает транзакцию фрагмента после сохранения состояния активности, это приведет к сбою, поэтому мы никогда не захотим вызывать этот обратный вызов.

Чтобы упростить использование этого примера, класс Lifecycle позволяет другим объектам запрашивать текущее состояние.

С этой реализацией наш класс LocationListener полностью осведомлен о жизненном цикле; он может выполнять свою собственную инициализацию и очистку без управления со стороны activity. Если нам нужно использовать наш LocationListener из другого действия или другого фрагмента, нам просто нужно его инициализировать. Все операции настройки и разрушения управляются самим классом.

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

Имплементация кастомного LifecycleOwner

Фрагменты и действия в библиотеке поддержки 26.1.0 и более поздние версии уже реализуют интерфейс LifecycleOwner.

Если у вас есть пользовательский класс, который вы хотите создать LifecycleOwner, вы можете использовать класс LifecycleRegistry, но вам нужно переслать события в этот класс, как показано в следующем примере кода:

 

Продолжение следует...