Android开发Android开发经验谈Android开发

RxJava系列专题 (一) --- 基本概述

2019-03-17  本文已影响4人  墨迹_T

一、前言

    虽然之前也有学习过RxJava,但是因为公司项目没有使用,所以也只是了解了它的一些好处。最近新入职了一家公司,里面大量使用了RxJava,也是时候做一下系统的学习了。关于RxJava的好处现在我先不提,相信你也听说了很多,但是任何一个好的工具能真正帮助到你的前提是,你要长期的去使用,我也相信,再真正的使用过程中,你也能和我一样体会到它真正的精髓。

二、简介

    我们都知道RxJava是一种观察者模式,所以就会有观察者Observer和被观察者Observable。两者中间通过一系列的操作符,将被观察的对象进行转化、筛选等操作,通过subscribe()方法进行绑定,最终发送到观察者上。如下段代码:

       val observable = Observable.create<Int> { emitter ->
            emitter.onNext(1)
            emitter.onNext(2)
            emitter.onNext(3)
            emitter.onComplete()
        }
        val observer = object :Observer<Int>{
            override fun onSubscribe(d: Disposable?) {

            }

            override fun onNext(value: Int) {

            }

            override fun onError(e: Throwable?) {

            }

            override fun onComplete() {

            }
        }
        observable.subscribe(observer)

一般我们会写成链式调用的方式,看起来十分舒畅。

Observable.create<Int> { emitter ->
            emitter.onNext(1)
            emitter.onNext(2)
            emitter.onNext(3)
            emitter.onComplete()
        }.subscribe(object :Observer<Int>{
            override fun onSubscribe(d: Disposable?) {

            }

            override fun onNext(value: Int) {

            }

            override fun onError(e: Throwable?) {

            }

            override fun onComplete() {
                
            }
        })

Observable.create是被观察者的创建过程,我们后面会详细介绍,先看下几个接受的回调方法。
    其中onNext()onComplete()onError()就是对应上游emitter中所发送的,emitter顾名思义是一个发射器。几个方法中需要注意的是,你可以发送多个onNext(),但是你只能发送一个onComplete()或者onError()来代表结束,且必须发送。Disposable的翻译是“一次性的”,在这里你可以使用它的 dispose()方法,终止观察。
    如果我们只关注其中的部分回调,subscribe()方法提供了一系列的重载函数如下:

subscribe(onNext : Consumer)
subscribe(onNext : Consumer,onError : Consumer)
subscribe(onNext : Consumer,onError : Consumer,onComplete : Action)
subscribe(onNext : Consumer,onError : Consumer,onComplete : Action,onSubscribe : Consumer)

所以,假如我们只关心onNext的话,可以写成:

Observable.create<Int> { emitter ->
            emitter.onNext(1)
            emitter.onNext(2)
            emitter.onNext(3)
            emitter.onComplete()
        }.subscribe{
            Log.e(TAG,"$it")
        }

三、总结

  RxJava虽然有很多种被观察者,有各种不同的操作符,但是无外乎都是看起来同样的使用方式,只是各自的适用场景不同。现在你已经初步掌握了它,我建议可以在项目中尝试去使用。遇到你需要的场景的时候再去网上进行查找,同时同步的进行一些学习,RxJava能做的比你想的要多。下一章,我们就去来学习创建操作符。

上一篇 下一篇

猜你喜欢

热点阅读