基于RxJava的LiveData实现
架构组件
谷歌官方推出了架构组件,用来解决生命周期,数据库访问,ViewModel的定义,数据订阅等等问题。
LiveData
通过相关阅读1这篇文章,是可以知道LiveData是拥有对LifeCycle感知能力的,可以在onStart环节通知观察者数据,并且在onDestory阶段移除观察者。
但这都是新的一套,如果项目中已经大量使用RxJava的同学来说,LiveData又不能完全融入到RxJava体系中去,需要有一些转换操作。有LiveDataReactiveStreams、LiveDataToRxJava等的转换工具,也有类似Live这样可以给RxJava注入生命周期感知的代码。
RxData
我自己做了RxData,用200行代码基于RxJava实现LiveData的基本功能,使用方式和LiveData也比较像,优势就是RxJava和LiveData的优势合体,可以轻松做到线程切换,同时也可以RxData处理生命周期
1. 定义一个数据
类似Observable
和LiveData
var dataRx = RxData<String>()
2. 设置或者获取数据
// 设置数据,支持Null
dataRx.set("Hello RxData")
// 获取数据
var str = dataRx.get()
3. 设置Rx订阅
为了方便看清楚返回类型,没用lambda语法。onNext
方法将会返回一个DataWrap
的数据包装类,可以判断数据是否为空
dataRx.observable(lifecycleowner)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Consumer<RxData.DataWrap<String>> {
override fun accept(t: RxData.DataWrap<String>?) {
if (t!!.isNull) {
System.out.println("获取了一个Null值")
} else {
val str = t.get()
}
}
})
结束语
是不是很简单,代码不多,使用起来也很方便。可以任意切换线程,并且拥有生命周期感知的能力
有问题欢迎大家来踩。
Github地址:https://github.com/wanpg/RxData