一、前言
虽然之前也有学习过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能做的比你想的要多。下一章,我们就去来学习创建操作符。
网友评论