LiveData (Deprecated)
LiveData официально устарела и больше не поддерживается Google. Мигрируй на Flow.
LiveData
Класс который хранит данные и реализует паттерн Observable. LiveData
учитывает жизненный цикл компонентов Android.
MediatorLiveData
Подкласс LiveData
, который может наблюдать за другими объектами LiveData
и реагировать на изменения в них. Объединяет несколько LiveData
в один объект.
observe
Добавляет наблюдателя в список, события отправляются в главный поток, если у LiveData
уже установлены данные, они будут доставлены наблюдателю. Будет получать события, пока находится в состоянии STARTED
или RESUMED
, будет автоматически удален при переходе в состояние DESTROYED
. Если наблюдатель не активен - данные не доставляются, когда станет активен получит последние доступные данные.
observeForever
Добавляет наблюдателя в список, метот работает как observe
, который всегда активен. Будет получать все события и никогда не будет автоматически удален. Чтобы прекратить наблюдение нужно вручную вызвать removeObserver
. Используется в тестах.
viewLifecycleOwner
Класс Fragment
реализует интерфейс LifecycleOwner
, поэтому в метод LiveData.observe
первым параметром можно передавать this, также как в Activity. Но жизненный цикл View отличается от жизненного цикла фрагмента. Ивент из LiveData
может прийти после вызова метода onDestroyView
. В этом случае View
фрагмента занулится, и при попытке обновления UI будет брошен NullPointerException. Поэтому рекомендуется использовать метод viewLifecycleOwner, который возвращает объект LifecycleOwner
, ассоциированный с жизненным циклом View
.
setValue
Устанавливает значение в LiveData
. Если есть активные наблюдатели, значение будет отправлено им. Этот метод должен вызываться из главного потока.
postValue
Устанавливает значение в LiveData
. Метод можно вызвать из фонового потока.
map
Применяет заданную функцию на главном потоке к каждому значению, выдаваемому источником LiveData
, и возвращает LiveData
, который выдает результат преобразования.
switchMap
Преобразует каждый элемент исходной LiveData
в новый промежуточный LiveData
-стрим.
distinctUntilChanged
Возвращает новое значение, только если оно != предыдущему, для сравнения используется equals
.
private val numberMutableLiveData: MutableLiveData<Number> = MutableLiveData(0)
val numberLiveData: LiveData<Number> = numberMutableLiveData
numberMutableLiveData.value = 100
numberMutableLiveData.postValue(100)
numberLiveData.observe(viewLifecycleOwner, Observer { number ->
println(number)
})
liveData
Создает LiveData со значениями, полученными в данном билдере.
val data: LiveData<Int> = liveData {
delay(3000)
emit(3)
}
asLiveData
Создает LiveData
со значениями, созданными из Flow
.
val valueLiveData: LiveData<Boolean> = liveData {
emitSource(interactor.getValueFlow().asLiveData())
}