LiveData实现原理

LiveData
使用LiveData LiveData = new LiveData();

liveData.obsever(LifeCycleOwner owner,new Observer() {
@Override
public void onChanged(Data data) {
textview.setText(data.getText());
}});

Activity继承了LifeCycleOwner,它是被观察者,管理着所有的观察者,当生命周期状态变化的时候会通知观察者作出响应。

实际上LiveData传递数据的方法也是通过Handler。在postValue()方法中,LiveData调用ArchTaskExecutor.postToMainThread(),将一个Runnable对象传递给主线程。这个Runnable对象调用setValue()对数据进行更新。

另一个经常和LiveData搭配使用的是ViewModel。ViewModel用于管理Activity或Fragment中的各LiveData对象。可以把ViewModel看成是LiveData的集合。ViewModel的优点是可以和Activity或Fragment绑定在一起,并且在配置改变引起的Activity/Fragment销毁时,ViewModel仍然可以持有状态。

LiveData通过观察宿主的生命周期变化,接受通知其onChange()方法会回调,进而设置Ui数据,这本身是观察者模式,LiveData是观察者,宿主是被观察者。被观察者变化引起观察者变化。

2.LiveData在注册的时候 会绑定生命周期 ,当宿主销毁的时候 LiveData反注册
3.当宿主的生命周期变得非活跃状态的时候,那么它将在再次变成活跃状态时能够接受到最新的数据,比如Activity前台到后台 后台到前台。

判断当前宿主的生命周期状态 是否是STARTED或RESUMED ,是的话就是活跃状态就可以发送数据回调onChanged方法,onPause时生命周期不活跃不会调用onChanged方法,remove的时候需要移除观察者。

你可能感兴趣的:(LiveData实现原理)