理解 RxJava 中的 Single 和 Completable

在大多数 RxJava 示例代码和教程中出现最为频繁的一个类
—— Observable,它是产生响应式编程魔力的关键。它的用法很简单,只需要跟踪
3 个事件
—— onNext澳门新葡亰手机版,,onErroronCompleted就可以应用上百个操作符来实现自己的表达式。那么为什么你还需要了解其他东西?

Maybe tomorrow.jpeg

但是你仔细思考下,你真的需要每次都知道这 3
个事件吗?实际上,在大多数情况下并不需要。ReactiveX 文档中讲述的基本都是关于连续的事件流,因此我们经常忘记通常我们关心的只是监听单一事件或者只监听 completed
or failed 事件。

通常情况下,如果我们想要使用 RxJava
首先会想到的是使用Observable,如果要考虑到Backpressure的情况,在
RxJava2.x 时代我们会使用Flowable。除了Observable和Flowable之外,在
RxJava2.x 中还有三种类型的Observables:Single、Completable、Maybe。

在这种情况下我们应该考虑用 RxJava 的两个绝妙的设计
—— Single<T> 和 Completable,在分析两者之前,让我们先看看他们应用场景的示例。

类型 描述
Observable<T> 能够发射0或n个数据,并以成功或错误事件终止。
Flowable<T> 能够发射0或n个数据,并以成功或错误事件终止。 支持Backpressure,可以控制数据源发射的速度。
Single<T> 只发射单个数据或错误事件。
Completable 它从来不发射数据,只处理 onComplete 和 onError 事件。可以看成是Rx的Runnable。
Maybe<T> 能够发射0或者1个数据,要么成功,要么失败。有点类似于Optional

本文中所有代码都是基于 RxJava 2.x ,不是 1.x 版本。如果你还没升级
RxJava 到最新的 2.x 版本, 强烈建议你马上升级。

从上面的表格可以看出,这五种被观察者类型中只有Flowable能支持Backpressure,如果有需要Backpressure的情况,还是必须要使用Flowable。