RxJava2变化
RxJava2(下面统称为rx2)按照Reactive-Streams specification规范进行了重写,因而与RxJava1(下面统称为rx1)相比有了不少的变化。
引用包名不同
import时的包名由rx.*
变成了io.reactive.*
禁止接受null
在rx1中,Observable可以发射任何类型的值,包括null,因此我们不用当心null的问题,即使是像这样使用也不会有任何问题:Observable.just(null)
, 但在rx2中不再允许发射null,否则会抛出了NullPointerException,因此在使用rx2时就必须先做好null值的判断,避免NPE。Observable与Flowable
在rx1中,比较让人诟病的就是背压问题,rx1部分支持背压,而且不能很好的处理背压问题(即被观察者发射速度太快(例如一些UI事件)以至于它的操作符或订阅者不能及时处理相关消息,进而抛出MissingBackpressureException),因而需要开发者自己控制上流的发射速度或者在下游做好限制处理。不过大部分时候,我们都不需要考虑背压问题,因此,rx2便增加了一个新的被观察者Flowable, Flowable的主要特点便是支持背压,而原先的Observable便更改为不再支持背压了,因此我们便可以根据自己的需求来选择合适的被观察者。Observer与Suscriber
与Observable与Flowable对应,它两的订阅者分别是Observer与Suscriber, 即Observable.subscribe(Observer)
和Flowable.subscribe(Subscriber)
。因而,Observable在create时不再Subscriber参数,而是一个ObservableEmitter, 即Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> emitter) throws Exception { } })
遵循reactive-streams,取消了原先的Suscriber,改用reactive-streams的Suscriber,同时Observer与之保持一致,因此rx2的Observer和Suscriber与rx1的有点不同,即
onNext, onError, onComplete
依然存在着,但onStart
便不存在了,不过新的onSubscribe
方法其实也可以替代原先的onStart
,若依然想用onStart
,rx2也有提供几个实现Suscriber接口又包含该方法的抽象类:DefaultSubscriber
,ResourceSubscriber
,DisposableSubscriber
。Disposable
在rx2中,由于引入了reac