rx.xxx 和 io.reactivex.xxx RxJava1 和 RxJava2 和 RxJava3

在使用RxJava想要创建一个Observable,导入包的时候发现

发现怎么这么多,我该选哪个?

上图  1位置的io.reactivex是代表了Rxjava2里面的Observable;

   2位置的java.util是java自带的Observable;

   3位置的rx是RxJava1里面的Observable。

可是我项目里面我只依赖了RxJava2,为啥会有RxJava1呢?

那可能是你项目中使用的其他的库有用到RxJava1。

 所以 

 rx.xxx代表了RxJava1;

io.reactivex.xxx代表了RxJava2;

io.reactivex.rxjava3.xxx 代表了RxJava3.

描述 RxJava 1.X RxJava 2.X
package包名 rx.xxx io.reactivex.xxx
Reactive Streams规范 1.X早于Reactive Streams规范出现,仅部分支持规范 完全支持
Backpressure 背压 对背压的支持不完善 Observable设计为不支持背压
新增Flowable支持背压
null空值 支持 不再支持null值,传入null值会抛出 NullPointerException
Schedulers线程调度器 Schedulers.immediate()
Schedulers.trampoline()
Schedulers.computation()
Schedulers.newThread()
Schedulers.io()
Schedulers.from(executor)
AndroidSchedulers.mainThread()
移除Schedulers.immediate()
新增Schedulers.single()
其它未变
Single 行为类似Observable,但只会发射一个onSuccessonError 按照Reactive Streams规范重新设计,遵循协议onSubscribe(onSuccess/onError)
Completable 行为类似Observable,要么全部成功,要么就失败 按照Reactive Streams规范重新设计,遵循协议onSubscribe (onComplete/onError)
Maybe 2.X新增,行为类似Observable,可能会有一个数据或一个错误,也可能什么都没有。可以将其视为一种返回可空值的方法。这种方法如果不抛出异常的话,将总是会返回一些东西,但是返回值可能为空,也可能不为空。按照Reactive Streams规范设计,遵循协议onSubscribe (onSuccess/onError/onComplete)
Flowable 2.X新增,行为类似Observable,按照Reactive Streams规范设计,支持背压Backpressure
Subject AsyncSubject
BehaviorSubject
PublishSubject
ReplaySubject
UnicastSubject
2.X依然维护这些Subject现有的功能,并新增:
AsyncProcessor
BehaviorProcessor
PublishProcessor
ReplayProcessor
UnicastProcessor
支持背压Backpressure
Subscriber Subscriber 由于与Reactive Streams的命名冲突,Subscriber已重命名为Disposable

RxJava3的改动点这里

背压是啥?

背压就是 如果被观察者发送数据的速度大于观察者处理数据的速度,会导致异常报错。 而让数据不是一股脑的全部推过来,根据处理数据的速度主动去拉数据的策略。

猜你喜欢

转载自blog.csdn.net/u011288271/article/details/107918117