Как вы, возможно, знаете, в реактивной экосистеме у нас есть Observable, который испускает данные, и Observer, который подписывается (получает уведомление) об этом Observable излучении, нет ничего странного в том, как работает так называемый паттерн Observer. Наблюдаемый что-то «кричит», Наблюдатель получает уведомление, что Наблюдаемый что-то кричит в данный момент.
Думайте LiveData
как Наблюдаемый, который позволяет вам управлять Наблюдателями, которые находятся в active
состоянии. Другими словами LiveData
, это простая наблюдаемая, но также заботящаяся о жизненном цикле.
Но давайте посмотрим на два кода, которые вы запрашиваете:
А) Живые данные
Б) RXJava
А) Это базовая реализация LiveData
1) вы обычно создаете экземпляр LiveData в ViewModel для поддержания изменения ориентации (у вас могут быть LiveData, предназначенные только для чтения, или MutableLiveData, доступные для записи, поэтому вы обычно выставляете их вне класса LiveData)
2) в OnCreate
методе Main Activity (не в ViewModel) вы «подписываете» объект Observer (обычно это метод onChanged)
3) вы запускаете метод наблюдения, чтобы установить ссылку
Первый ViewModel
(владеет бизнес-логикой)
class ViewModel : ViewModel() { //Point 1
var liveData: MutableLiveData<Int> = MutableLiveData()
}
И это MainActivity
(настолько глупо, насколько это возможно)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val ViewModelProvider= ViewModelProviders.of(this).get(ViewModel::class.java)
ViewModelProvider.observe(this, Observer {//Points 2 and 3
//what you want to observe
})
}
}
}
Б) Это базовая реализация RXJava
1) вы объявляете наблюдаемую
2) вы объявляете наблюдателя
3) вы подписываете Observable с Observer
Observable.just(1, 2, 3, 4, 5, 6) // Point 1
.subscribe(new Subscriber() { //Points 2 & 3
@Override
public void onCompleted() {
System.out.println("Complete!");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Double value) {
System.out.println("onNext: " + value);
}
});
В частности LiveData
, используется Lifecycle
и часто ViewModel
(как мы видели) с компонентами архитектуры. Фактически, когда LiveData
в сочетании с ViewModel позволяет вам обновлять в режиме реального времени каждое изменение в Observer, так что события управляются в режиме реального времени, где это необходимо. Для использования LiveData
настоятельно рекомендуется знать концепцию жизненного цикла и относительных объектов LifeCycleOwner / LifeCycle , также я бы посоветовал вам взглянуть на преобразования , если вы хотите реализовать их LiveData
в реальных сценариях. Здесь вы можете найти несколько вариантов использования от большого общего программного обеспечения .
Заключение в основномLiveData
упрощенныйRXJava
, элегантный способ наблюдать за изменениями в нескольких компонентах без создания явных так называемых правил зависимости между компонентами, чтобы вы могли намного проще протестировать код и сделать его намного более читабельным. RXJava, позволяет вам делать вещи LiveData и многое другое. Из-за расширенных функциональных возможностей RXJava вы можете использовать LiveData для простых случаев или использовать всю мощь RXJava, продолжая использовать компоненты архитектуры Android в качестве ViewModel , конечно, это означает, что этоRXJava
может быть гораздо более сложным, просто подумайте, что вместо этого есть сотни операторов SwitchMap и Карта LiveData (на данный момент).
RXJava версии 2 - это библиотека, которая произвела революцию в объектно-ориентированной парадигме, добавив так называемый функциональный способ управления потоком программ.