您可能知道,在响应式生态系统中,我们有一个发出数据的 Observable 和一个订阅(收到通知)此 Observable 发射的 Observer,这并不奇怪工作所谓的观察者模式。一个 Observable “呼喊”某事,Observer 会收到通知,Observable 在给定时刻呼喊某事。
将LiveData 视为一个Observable,它允许您管理处于active 状态的Observer。换句话说,LiveData 是一个简单的 Observable 但也负责生命周期。
但是让我们看看你要求的两个代码案例:
A) 实时数据
B) RXJava
A)这是 LiveData 的基本实现
1) 您通常在 ViewModel 中实例化 LiveData 以保持方向变化(您可以拥有只读的 LiveData,或可写的 MutableLiveData,因此您通常从 LiveData 类公开外部)
2) 在 Main Activity(不是 ViewModel)的 OnCreate 方法中
你“订阅”了一个 Observer 对象(通常是一个 onChanged 方法)
3)你启动方法observe建立链接
首先是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
})
}
}
}
B)这是RXJava的基本实现
1) 你声明了一个 Observable
2) 你声明了一个观察者
3) 你使用 Observer 订阅 Observable
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强烈建议了解lifecycle的概念和相关对象LifeCycleOwner/LifeCycle,如果你想在现实生活场景中实现LiveData,我建议你看看Transformations .在这里您可以找到来自伟大的commonsware 的一些用例。
总结基本上LiveData是一个简化的RXJava,这是一种观察多个组件变化的优雅方式,无需在组件之间创建显式的所谓依赖规则,以便您可以更轻松地测试代码并使其更具可读性。
RXJava,允许你做 LiveData 的事情等等。由于 RXJava 的扩展功能,您既可以将 LiveData 用于简单的案例,也可以利用 RXJava 的所有功能继续使用 Android 架构组件作为ViewModel,当然这意味着RXJava 可能要复杂得多,想想有数百个运算符,而不是 LiveData 的 SwitchMap 和 Map(目前)。
RXJava 版本 2 是一个彻底改变了面向对象范式的库,添加了一种所谓的函数式方法来管理程序流。