LiveData (Deprecated)

LiveData официально устарела и больше не поддерживается Google. Мигрируй на Flow.
https://d.android.com/reference/android/arch/lifecycle/LiveData
https://developer.android.com/reference/android/arch/lifecycle/LiveDataReactiveStreams
https://developer.android.com/reference/android/arch/lifecycle/MediatorLiveData
https://developer.android.com/reference/android/arch/lifecycle/MutableLiveData

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())
}