https://zhuanlan.zhihu.com/p/33206893
LiveData 内部通过观察者模式实现了事件的分发,同时内部又绑定了lifecycle,所以只有当observer处于starr或者resume状态,才能分发事件给观察者
ViewModel,ViewModelProvider
ViewModelProvider内部通过一个hashmap<key,ViewModel>用来存储数据,这个数据的存活周期由当前绑定的Activity或者Fragment决定,
ViewModel配合LiveData一起使用,避免了生命周期的管控(liveData的作用),同时实现了数据的保存。
更新:
1 主动setValue,LiveData 通过 setValue(当前线程),postValue(主线程)来实现更新,调用dispatchValue,mVersion ++,如果当前Fragment 或者 Activity的状态 >= onStart(),则回调当前Observer的 onChange,
2 当 Activity或者Fragment生命周期 >= onStart时,会遍历所有的Observer,如果Observer mVersion > mLastVersion,则更新
LIVEDATA的问题:
问题1: observeForever, 开始注册时,立即收到更新消息, 另外ObserveForever因为没有生命周期管控,所以会存在内存泄漏
问题2: observe(Lif