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

Работа с объектами LiveData

Выполните следующие действия для работы с объектами LiveData:

  1. Создайте экземпляр LiveData для удержания определенного типа данных. Обычно это делается в вашем классе ViewModel.
  2. Создайте объект Observer, который определяет метод onChanged(), который контролирует, что происходит при изменении данных, хранящихся в объекте LiveData. Обычно вы создаете объект Observer в контроллере пользовательского интерфейса, например, в виде активности или фрагмента.
  3. Прикрепите (Attach) объект Observer к объекту LiveData, используя метод observe() . Метод  observe()  принимает объект LifecycleOwner. Это подписывает объект Observer на объект LiveData, чтобы он уведомлялся об изменениях. Обычно вы добавляете объект Observer в контроллер пользовательского интерфейса, например, в действие или фрагмент.

Примечание. Вы можете зарегистрировать наблюдателя без связанного объекта LifecycleOwner с помощью метода observeForever(Observer). В этом случае наблюдатель считается всегда активным и поэтому всегда уведомляется об изменениях. Вы можете удалить этих наблюдателей, вызывая метод removeObserver(Observer).

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

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

Создание объектов LiveData

LiveData — это обертка (wrapper), которая может использоваться с любыми данными, включая объекты, реализующие коллекции, такие как List. Объект LiveData обычно хранится в объекте ViewModel и доступен через метод getter, как показано в следующем примере:

Первоначально данные в объекте LiveData не заданы.

Примечание. Обязательно сохраните объекты LiveData, которые обновляют пользовательский интерфейс в объектах ViewModel, в отличие от действия или фрагмента, по следующим причинам:

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

Наблюдение за объектами LiveData

В большинстве случаев метод onCreate (Activity) компонента приложения является подходящим местом для начала наблюдения объекта LiveData по следующим причинам:

  • Для обеспечения того, чтобы система не выполняла избыточные вызовы из метода onResume () активности или фрагмента.
  • Чтобы убедиться, что активность или фрагмент имеют данные, которые он может отображать, как только он станет активным. Как только компонент приложения находится в состоянии STARTED, он получает самое последнее значение из объектов LiveData, которые он наблюдает. Это происходит только в том случае, если объект LiveData, подлежащий наблюдению, был установлен.

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

Следующий пример кода иллюстрирует, как начать наблюдение за объектом LiveData:

После вызова observe() с nameObserver, переданным как параметр, немедленно вызывается onChanged(), предоставляющая самое последнее значение, сохраненное в mCurrentName. Если объект LiveData не задал значение в mCurrentName, onChanged() не вызывается.

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

Читать еще

Читать ещё :   Руководство по архитектуре приложений. Часть 1