本文是楼主学习LifeCycle和LiveData原理的一些总结,本文不会长篇分析源码,而是利用类图和总结性的文字归纳原理。由于Livedata和LifeCycle有紧密联系,所以本文先总结LifeCycle原理,再总结LifeData原理。
本文LifeCycle基于版本androidx.lifecycle:lifecycle-runtime:2.1.0, LiveData基于版本androidx.lifecycle:lifecycle-livedata-core:2.0.0
本文内容结构
(1)实际上就是一个观察者模式的数据容器,当数据改变时,通知UI刷新;
(2)数据LiveData
(3)LiveData能感知activity, fragment组件的生命周期,当activity,fragment销毁时,会自动清除引用,不必担心内存泄漏。而其他观察者回调的库需要自己管理生命周期。
(4)当activity或者fragment处于活动状态时如started,resumed,liveData才会通知。
(5)LiveData通常和ViewModel一起使用, LiveData
LifeCycle的核心原理总结:
1)继承自LifeCycle的LifecycleRegistry,它与LifeCycleOwner(Activity,Fragment)相互持有。
2)在LifeCycleOwner里通过getLifeCycle()拿到LifeCycleRegistry可以添加删除LifeCycleObserver。
3)当LifeCycleOwner(Activity,Fragment)发生生命周期改变的时候,LifeCycleOwner调用dispatch分发事件给LifecycleRegistry。
4)LifeCycleRegistry调用handleLifeCycleEvent()处理:遍历已添加的LifeCycleObserver,调用LifeCycleObserver.onStateChanged()。
LifeData的核心原理总结
1)LiveData本身是一个数据持有类。
2)LiveData有一个内部类:LifeCycleBoundObserver(实现了LifeCycleObserver)。
3)LifeCycleBoundObserver持有LifeCycleOwner(Activity、Fragment组件)和一个普通的接口类Observer(需要实现onChanged)。这个普通的接口Observer是业务实现,业务负责监听处理回调。当LifeCycleOwner(Activity、Fragment组件)生命周期发生改变时,LifeCycleObserver的onStateChanged调用(详情看LifeCycle原理)。
4)LifeCycleObserver的onStateChanged调用时如果处于激活状态时,调用LiveData.dispatchingValue更新数据->Observer.onChanged()。
5)LiveData.setValue声明在主线程调用,最后也是调用LiveData.dispatchingValue。
6)LifecycleBoundObserver持有LifecycleOwner的原因:后续通过LifecycleOwner获取LifecycleRegistry,再通过LifecycleRegistry 获取State以及State为destroyed状态的时候remove掉LifecycleObserver。
7)LiveData中会缓存key: 普通的Observer, Value: LifecycleBoundObserver;LifecycleRegistry 会缓存key: LifecycleBoundObserver,value: ObserverWithState。
LiveData的应用:
MVVM: ViewModel+LiveData+DataBinding+Retrofit+Room+Paging+RxJava 总结与实践(Java实现)_xiaobaaidaba123的专栏-CSDN博客