关于LiveData全面详解(附事件总线)
发布网友
发布时间:2024-10-19 19:53
我来回答
共1个回答
热心网友
时间:2024-11-22 13:30
前言
在MVVM架构模式中,ViewModel不持有宿主信息,业务逻辑在ViewModel层完成,而非Activities或Fragments。LiveData在其中扮演数据驱动的角色:
过去我们使用Handler、EventBus、RxjavaBus进行消息通信,LiveData也是一种观察者模式,作用类似于RxJava,是观察数据的类。与RxJava相比,LiveData通常配合Jetpack组件使用,能够在Activity、Fragment和Service中正确处理生命周期。
一、什么是LiveData
1.介绍
LiveData组件是Jetpack新推出的基于观察者的消息订阅/分发组件,具有宿主(Activity/Fragment)生命周期感知能力。这种感知能力可确保LiveData仅向活跃状态的观察者分发消息,即只有处于活跃状态的观察者才能接收到消息。
2.LiveData的特点
使用LiveData具有以下优势:
3.LiveData不足之处:
二、LiveData的几种用法
1.MutableLiveData
在使用LiveData进行消息分发时,需要使用这个子类,设计原因是为了考虑单一开闭原则,只有获取MutableLiveData才能发送消息,LiveData只能接收消息,避免拿到LiveData既能发送消息又能接收消息的混乱使用。
2.Transformations.map操作符
Transformations.map可以在LiveData的数据分发给观察者之前进行转换,并返回一个新的LiveData对象。
三、LiveData实现原理
1.粘性事件分发流程
从LiveData注册观察者开始:
因此wrapper能够接收到宿主生命周期变化的事件,当第一次注册进去时也会触发状态的同步,也能接收完整的生命周期事件。
2.普通消息分发流程
普通消息分发流程即调用postValue(),setValue()才会触发消息的分发。
四、总结
1.粘性事件分发流程
2.普通消息发送流程
五、使用LiveData打造消息总线
基于LiveData打造一款不会内存泄漏、不用反注册的消息总线,且支持粘性事件。