RxData--基于RxJava的LiveData

基于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. 定义一个数据

类似ObservableLiveData

var dataRx = RxData()
2. 设置或者获取数据
// 设置数据,支持Null
dataRx.set("Hello RxData")
// 获取数据
var str = dataRx.get()
3. 设置Rx订阅

​ 为了方便看清楚返回类型,没用lambda语法。onNext方法将会返回一个DataWrap的数据包装类,可以判断数据是否为空

dataRx.observable(lifecycleowner)
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(object : Consumer> {
        override fun accept(t: RxData.DataWrap?) {
            if (t!!.isNull) {
                System.out.println("获取了一个Null值")
            } else {
                val str = t.get()
            }
        }
    })

结束语

​ 是不是很简单,代码不多,使用起来也很方便。可以任意切换线程,并且拥有生命周期感知的能力

​ 有问题欢迎大家来踩。

​ Github地址:https://github.com/wanpg/RxData

相关阅读

  1. Android 生命周期架构组件与 RxJava 完美协作
  2. 把LiveData转换成RxJava的接口
  3. LiveDataReactiveStreams

你可能感兴趣的:(RxData--基于RxJava的LiveData)