在使用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 ,但只会发射一个onSuccess 或onError | 按照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 |
背压是啥?
背压就是 如果被观察者发送数据的速度大于观察者处理数据的速度,会导致异常报错。 而让数据不是一股脑的全部推过来,根据处理数据的速度主动去拉数据的策略。