什么是liveData
liveData是个可观察的数据持有者,和常规的observable不同,liveData具有生命周期感知的,这意味着它能够在activity fragment service中正确的处理生命周期。liveData很少单独使用,更多的是和Android jetpack 其他组件配合使用,比如viewmodel。
当数据更新后,liveData就会通知它所以的观察者,和RXJava不同的时候,liveData 并不是通知所有的观察者,它只会通知处于Active状态的观察者。如果一个观察者处于Paused状态或者destoryed状态(lifecycle状态),不会收到通知。
liveData也不会产生内存泄漏问题,开发者不需要在onPause或者onDestory中解除对liveData的订阅,因为liveData在内部结构中,会一直判断当前状态,当处于destoryed时候,就会自动移除订阅。
111.png
116.png
liveData基本使用-- 创建实例,订阅观察者,发送数据
1.创建liveData实例对象。mutableLiveData继承LiveData(抽象类)
444.png
2.订阅(observe)观察者,传入lifecycle对象和Observer接口,Observer是个泛型接口,为了回调数据,只声明了一个onChanged函数。
333.png
3.发送数据,postValue 异步子线程发送,setValue 主线程发送
222.png
案例模拟,liveData只有在resumed和started状态 才会发送数据
666.png
777.png
liveData 粘性数据,先发送数据,后订阅,也能接收到发送的数据
100.png
999.png
114.png
115.png
liveData 源码解析
liveData订阅-- observe
订阅的过程,就是创建观察者,对lifecycle进行订阅,如此就可以感知activity fragment等生命周期
102.png
103.png
201.png
202.png
203.png
204.png
206.png
112.png
113.png
liveData 发送数据--- postValue和setValue
postValue 通过 handle 从子线程切换为主线程,最终还是调用setValue
107.png
108.png
110.png
109.png
104.png
112.png
113.png