Observable 是通用的 ReactiveX 构建块,是随时间发出值的事件源。 (因此存在于 ReactiveX 扩展到的每种语言中)
简而言之,可观察的事件是:
onNext* (onCompleted | onError)? /(* 零个或多个 ? - 零个或 1)
Single 和 Completable 是 RxJava 独家引入的新类型,它们代表了 Observable 的简化类型,具有更简洁的 API。
Single 代表Observable 发出单个值或错误。
Completable 表示 Observable 不发出任何值,但只发出终端事件,onError 或 onCompleted
你可以把这些区别想成返回方法的区别:
对象集合 - 可观察
单个对象 - 单个
和不返回值的方法(void 方法) - 可完成。
Single 适用于面向任务的 Observable 并且您期望单个值,例如执行一次并返回值(或错误)的网络请求,网络调用以一次性方式操作,这意味着您不需要期望它随着时间的推移返回额外的值。另一个例子是 DB fetch 数据操作。
Completable 适用于当您有 Observable 并且您不关心操作产生的值或没有任何值时。
例如更新缓存,操作可以成功/失败,但没有任何价值。
另一个例子是一些长时间运行的初始化操作,它不返回任何东西。可以是 UPDATE/PUT 网络调用,结果只有成功指示。
无论如何,Completable 和 Single 并没有添加新功能,而是引入了更健壮和简洁的 API,从而更多地了解 API 所公开的 Observable 背后的操作。
编辑:
RxJava2 Maybe:
RxJava2 新增了一个名为Maybe 的新类型,Maybe 是Completable 和 Single 的组合。
在与上述相同的语言中,Maybe 可以被认为是一个返回的方法
Optional 某种类型,Optional 是 Object 的一个包装器,它明确告诉我们其中是否有一些值 - Object 或没有(而不是 null)。
使用Maybe,我们可以有一些与Single 完全相同的值,也可以不返回任何值——就像Completable。此外,像两者一样,我们也有错误。
Maybe 在我们想要标记 Observable 可能没有值并且刚刚完成时很有价值。
将从缓存中获取一个示例,我们不一定在缓存中有一个值,所以在这种情况下,我们将完成,o.w.我们将从缓存中获取 onNext 的值。
这也值得用 RxJava2 处理流中的非空值。
RxJava2 Flowable:
首先,让我们定义背压。背压是一种处理数据生成速度快于处理速度的情况的方法。 Flowable 具有背压支持,允许下游请求项目。您可以阅读更多关于差异的信息here。