数据监听,会及时通知订阅者
LiveData
ViewModel+LiveData可以实现对数据的监听(在MVVM架构的层与层之间扮演着桥梁的作用。当数据发生变化时,通过LiveData让数据的订阅者得到通知。)
用viewmodel、liveData后的架构图
用liveData的订阅者模式当页面数据变化时主动通知控件
LiveData是个可被观察的数据容器类。LiveData作为一个数据的容器可将数据包装起来,使数据成为被观察者,当数据变化时,观察者可获得通知。且我们不用自己去实现观察者模式,LiveData内部默认实现好了。
LiveData与ViewModel的关系
ViewModel存放页面所需的各种数据,还可以放一些与数据相关的业务逻辑。(如,可在ViewModel中对数据进行加工、获取等操作)
LiveData作用是在ViewModel中数据发生变化时通知页面。通常放在ViewModel中使用,用于包装ViewModel中那些需要被外界观察的数据。
LiveData的基本用法
还是计时器的功能
1 | dependencies{ |
1 | public class TimerWithLiveDataViewModel extends ViewModel{ |
1 | //使用这个 TimeViewModel |
LiveData 的 observe() 源码
1 |
|
LiveData 通过 observe() 是有跟 LifecycleOwner 的生命周期绑定了(即跟Activity、Fragment等的生命周期绑定了)
LiveData setValue和postValue的区别
两者都是更新数据的作用
setValue()
只能在主线程中调用;postValue()
可在任何线程中调用。
LiveData.observeForever()方法
LiveData.observeForever()使用与 observe() 没有太大区别。主要区别在于,当LiveData所包装的数据发生变化时,无论页面处于什么状态,observeForever() 都能收到通知。因此,在用完之后一定要调用 removeObserver() 方法来停止对 LiveData的观察,否则 LiveData 会一直处于激活状态,Activity则永远不会被系统自动回收,就会造成内存泄露。
1 |
|
ps:源码中observeForever没有跟LifecycleOwner绑定(即没有跟Activity等的生命周期绑定)