Android架构——LifeCycle和LiveData原理学习总结

本文是楼主学习LifeCycle和LiveData原理的一些总结,本文不会长篇分析源码,而是利用类图和总结性的文字归纳原理。由于Livedata和LifeCycle有紧密联系,所以本文先总结LifeCycle原理,再总结LifeData原理。

本文LifeCycle基于版本androidx.lifecycle:lifecycle-runtime:2.1.0, LiveData基于版本androidx.lifecycle:lifecycle-livedata-core:2.0.0

本文内容结构

一、简单介绍下LiveData有什么作用。

二、类图总结LifeCycle原理。

三、类图总结LiveData原理。
 

一、LiveData作用

(1)实际上就是一个观察者模式的数据容器,当数据改变时,通知UI刷新;

(2)数据LiveData<T>是观察者,组件activity, fragment是被观察者;

(3)LiveData能感知activity, fragment组件的生命周期,当activity,fragment销毁时,会自动清除引用,不必担心内存泄漏。而其他观察者回调的库需要自己管理生命周期。

(4)当activity或者fragment处于活动状态时如started,resumed,liveData才会通知。

(5)LiveData通常和ViewModel一起使用, LiveData<T>作为ViewModel的一个成员变量。
 

二、LifeCycle原理

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()。

三、LiveData原理

 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博客

猜你喜欢

转载自blog.csdn.net/xiaobaaidaba123/article/details/123030339
今日推荐