LiveData
使用LiveData LiveData = new LiveData();
liveData.obsever(LifeCycleOwner owner,new Observer<Data>() {
@Override
public void onChanged(Data data) {
textview.setText(data.getText());
}});
Activity繼承了LifeCycleOwner,它是被觀察者煤痕,管理著所有的觀察者职祷,當(dāng)生命周期狀態(tài)變化的時(shí)候會通知觀察者作出響應(yīng)轨帜。
實(shí)際上LiveData傳遞數(shù)據(jù)的方法也是通過Handler。在postValue()方法中感憾,LiveData調(diào)用ArchTaskExecutor.postToMainThread()鲜戒,將一個(gè)Runnable對象傳遞給主線程。這個(gè)Runnable對象調(diào)用setValue()對數(shù)據(jù)進(jìn)行更新沾歪。
另一個(gè)經(jīng)常和LiveData搭配使用的是ViewModel。ViewModel用于管理Activity或Fragment中的各LiveData對象雾消≡植可以把ViewModel看成是LiveData的集合。ViewModel的優(yōu)點(diǎn)是可以和Activity或Fragment綁定在一起立润,并且在配置改變引起的Activity/Fragment銷毀時(shí)狂窑,ViewModel仍然可以持有狀態(tài)。
LiveData通過觀察宿主的生命周期變化范删,接受通知其onChange()方法會回調(diào)蕾域,進(jìn)而設(shè)置Ui數(shù)據(jù),這本身是觀察者模式到旦,LiveData是觀察者旨巷,宿主是被觀察者。被觀察者變化引起觀察者變化添忘。
2.LiveData在注冊的時(shí)候 會綁定生命周期 采呐,當(dāng)宿主銷毀的時(shí)候 LiveData反注冊
3.當(dāng)宿主的生命周期變得非活躍狀態(tài)的時(shí)候,那么它將在再次變成活躍狀態(tài)時(shí)能夠接受到最新的數(shù)據(jù)搁骑,比如Activity前臺到后臺 后臺到前臺斧吐。
判斷當(dāng)前宿主的生命周期狀態(tài) 是否是STARTED或RESUMED ,是的話就是活躍狀態(tài)就可以發(fā)送數(shù)據(jù)回調(diào)onChanged方法仲器,onPause時(shí)生命周期不活躍不會調(diào)用onChanged方法煤率,remove的時(shí)候需要移除觀察者。