Android(48)LiveData 解析

2022-08-10  本文已影响0人  perry_Fan

这是以往常用的Handler 发送消息的模板代码。


以下是常见 liveData的使用情况。


LiveData的集中衍生类:

MutableLiveData:

我们在使用LiveData 做消息分发时,需要使用这个子类。之所以如此设计,是考虑到单一开闭原则,只有拿到了 MutableLiveData 对象才可以发送消息,LiveData 对象只能接收消息,避免拿到了 LiveData 对象时既能发送消息也能接受消息的混乱使用。

MediatorLiveData:

它可以统一观察多个 LiveData 的发射的数据进行统一的处理;同时也可以作为一个 LiveData,被其他 Observer 观察。


Transformations.map 操作符

它可以对 LiveData 进行变化,并返回一个新的 LiveData 对象


LiveData 核心方法

LiveData 实现原理

粘性消息分发流程


普通消息分发流程

源码分析



LiveData.LifecycleBoundObserver.onStateChanged():
为什么我们在使用LiveData时不需要关注宿主的生命状态呢?就在这里可以看到,因为当宿主生命周期发生变化时都会回调到此。


其中,在接下来会调用它:

LiveData还可以实现宿主生命周期消失还能接受消息的可能,如何实现呢?



LiveData.ObserverWrapper.activeStateChanged()
接下来分析一下宿主状态发生变化的进一步处理逻辑:


可以覆写方法做一些事件:

同样的,如果是不活跃状态也会进行回调处理:


最后进行值的分发:


LiveData.dispatchingValue():



有新的数据了,会遍历所有的观察者进行数据的分发。


LiveData.considerNotify()

接下来产生粘性事件的根本原因的代码逻辑来了:


LiveData.postValue()


LiveData.setValue()


上一篇下一篇

猜你喜欢

热点阅读