6682842403_7afe926bce_b

 

LiveData является наблюдаемым (observable) классом владельца данных. В отличие от обычного наблюдаемого, LiveData — lifecycle-aware, означающее, что он знает о жизненном цикле других компонентов приложения, таких как действия, фрагменты или службы. Это знание гарантирует, что LiveData обновляет наблюдателей компонентов приложения, которые находятся в активном состоянии жизненного цикла.

LiveData — позволяет вам наблюдать за изменениями данных на нескольких компонентах вашего приложения, не создавая явных, жестких путей зависимостей между ними. LiveData учитывает сложные жизненные циклы компонентов вашего приложения, включая действия, фрагменты, службы или любой LifecycleOwner, определенный в вашем приложении. LiveData управляет подписками наблюдателей, приостанавливая подписку на остановленные объекты LifecycleOwner и отменяя подписки на завершенные объекты LifecycleOwner.

LiveData считает что наблюдатель, который представлен классом Observer, находится в активном состоянии, если его жизненный цикл находится в состоянии STARTED или RESUMED. LiveData уведомляет только активных наблюдателей об обновлениях. Неактивные наблюдатели, зарегистрированные для просмотра объектов LiveData, не уведомляются об изменениях.

Вы можете зарегистрировать наблюдателя (observer) в паре с объектом, который реализует интерфейс LifecycleOwner. Эта взаимосвязь позволяет удалить наблюдателя, когда состояние соответствующего объекта Lifecycle изменится на DESTROYED. Это особенно полезно для действий и фрагментов, потому что они могут безопасно наблюдать объекты LiveData, а не беспокоиться об утечках — действия и фрагменты мгновенно отписываются, когда их жизненные циклы уничтожаются.

Преимущества использования LiveData

Обеспечивает соответствие вашего пользовательского интерфейса состоянию ваших данных

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

Отсутствие утечек памяти

Читать ещё :   Работа с Lifecycles с помощью Lifecycle-Aware компонент. Часть 3

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

 

Никаких сбоев из-за остановки активности

Если жизненный цикл наблюдателя неактивен, например, в случае нахождения активности в back stack, он не получает никаких событий LiveData.

 

Нет больше ручного управления жизненным циклом

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

 

Всегда актуальные данные

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

 

Правильные изменения конфигурации

Если активность или фрагмент воссозданы из-за изменения конфигурации, например, при вращении устройства, он немедленно получает последние доступные данные.

 

Обмен ресурсами

Вы можете расширить объект LiveData, используя шаблон singleton, чтобы обернуть системные службы, чтобы их можно было использовать в вашем приложении. Объект LiveData подключается к системной службе один раз, а затем любой наблюдатель, который нуждается в ресурсе, может просто наблюдать за объектом LiveData.

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