美文网首页Android开发
RxData--基于RxJava的LiveData

RxData--基于RxJava的LiveData

作者: 大庄 | 来源:发表于2018-05-24 13:52 被阅读75次

    基于RxJava的LiveData实现

    架构组件

    谷歌官方推出了架构组件,用来解决生命周期,数据库访问,ViewModel的定义,数据订阅等等问题。

    LiveData

    通过相关阅读1这篇文章,是可以知道LiveData是拥有对LifeCycle感知能力的,可以在onStart环节通知观察者数据,并且在onDestory阶段移除观察者。

    但这都是新的一套,如果项目中已经大量使用RxJava的同学来说,LiveData又不能完全融入到RxJava体系中去,需要有一些转换操作。有LiveDataReactiveStreamsLiveDataToRxJava等的转换工具,也有类似Live这样可以给RxJava注入生命周期感知的代码。

    RxData

    我自己做了RxData,用200行代码基于RxJava实现LiveData的基本功能,使用方式和LiveData也比较像,优势就是RxJava和LiveData的优势合体,可以轻松做到线程切换,同时也可以RxData处理生命周期

    1. 定义一个数据

    类似ObservableLiveData

    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

    相关阅读

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

    相关文章

      网友评论

        本文标题:RxData--基于RxJava的LiveData

        本文链接:https://www.haomeiwen.com/subject/vycsjftx.html