RxJava 中的 Observable、Completable 和 Single 有什么区别
What is the difference between Observable, Completable and Single in RxJava
谁能用清晰的例子解释一下 RxJava 中 Observable、Completable 和 Single 之间的区别?
在哪种情况下我们使用一种而不是另一种?
Observable
是通用的 ReactiveX 构建块,事件源随时间发出值。 (因此存在于 ReactiveX 扩展到的每种语言中)
简而言之,Observable 事件是:
onNext*(onCompleted | onError)? /(* 零个或多个 ? - 零个或 1)
Single
and Completable
是 RxJava 专门引入的新类型,代表 Observable
的简化类型,具有更简洁的 API.
Single
表示 Observable
发出单个值或错误。
Completable
表示 Observable
不发出任何值,但仅发出终端事件,onError
或 onCompleted
您可以将这些差异想象成 return 方法的差异:
对象集合 - Observable
单个对象 - 单个
和 return 没有值的方法(无效方法)- 可完成。
Single
当你有面向任务的 Observable 并且你期望单一值时可能是合适的,比如执行一次的网络请求和 return 值(或错误),网络调用在一个操作时间时尚,这意味着您不希望它随着时间的推移 return 增加价值。再比如DB fetch数据操作。
Completable
当您有一个 Observable
并且您不关心操作产生的值,或者没有任何值时,它是合适的。
比如更新一个缓存的例子,操作可以succeed/fail,但是没有值。
另一个例子是一些长 运行 初始化操作,但没有 return 任何东西。它可以是 UPDATE/PUT 只产生成功指示的网络调用。
无论如何,Completable 和 Single 都没有添加新功能,但它们引入了更健壮和简洁的 APIs,这说明了更多关于 API 公开的 Observable 背后的操作。
编辑:
RxJava2 Maybe
:
RxJava2增加了一个新的类型Maybe
,Maybe
是Completable
和Single的组合。
在与上面相同的语言中,Maybe
可以被认为是 return 的方法
Optional
某种类型,Optional
是 Object 的包装器,它明确地告诉我们是否有一些值 - Object
或没有(而不是 null)。
使用 Maybe
我们可以得到一些与 Single
完全相同的值,或者 return 什么都没有——就像 Completable
一样。此外,与两者一样,我们也有错误。
Maybe
当我们想要标记一个 Observable
可能没有值并且只会完成时,它是有价值的。
一个例子将从缓存中获取,我们不一定在缓存中有一个值,所以在这种情况下,我们将完成,o.w。我们将从缓存中获取 onNext
的值。
这也值得用 RxJava2 处理流中的非空值。
RxJava2 Flowable
:
首先,让我们定义背压。背压是一种处理数据生成速度快于处理速度的情况的方法。 Flowable
具有背压支持,允许下游请求项目。您可以阅读更多关于差异的信息 here.
- Flowable 和 Observable 可以表示有限流或无限流。
可流动支撑 背压.
- Single 是具有单个元素的流。
- 可能 是具有 0 个或 1 个元素的流。
- 最后一个 Completable 表示一个没有元素的流,即它
只能在没有值的情况下完成或失败。
我在 RXJava 部分 here 找到了一个简洁的答案。
单&单观察者
Single
总是只发出一个值或抛出错误。 Single
始终确保有发射。
Single 的一个用例是进行网络调用以获取响应,因为将立即获取响应。
注意这里,SingleObserver
没有 onNext() 来发送数据,而是在 onSuccess(Note note)
方法中接收数据。
Completable & CompletableObserver
Completable
observable 不会发出任何数据,而是通知任务的状态 success
或 failure
。当您想要执行某些任务而不期望任何值时,可以使用此 observable。
一个用例是通过发出 PUT 请求更新服务器上的一些数据。
谁能用清晰的例子解释一下 RxJava 中 Observable、Completable 和 Single 之间的区别?
在哪种情况下我们使用一种而不是另一种?
Observable
是通用的 ReactiveX 构建块,事件源随时间发出值。 (因此存在于 ReactiveX 扩展到的每种语言中)
简而言之,Observable 事件是:
onNext*(onCompleted | onError)? /(* 零个或多个 ? - 零个或 1)
Single
and Completable
是 RxJava 专门引入的新类型,代表 Observable
的简化类型,具有更简洁的 API.
Single
表示 Observable
发出单个值或错误。
Completable
表示 Observable
不发出任何值,但仅发出终端事件,onError
或 onCompleted
您可以将这些差异想象成 return 方法的差异:
对象集合 - Observable
单个对象 - 单个
和 return 没有值的方法(无效方法)- 可完成。
Single
当你有面向任务的 Observable 并且你期望单一值时可能是合适的,比如执行一次的网络请求和 return 值(或错误),网络调用在一个操作时间时尚,这意味着您不希望它随着时间的推移 return 增加价值。再比如DB fetch数据操作。
Completable
当您有一个 Observable
并且您不关心操作产生的值,或者没有任何值时,它是合适的。
比如更新一个缓存的例子,操作可以succeed/fail,但是没有值。
另一个例子是一些长 运行 初始化操作,但没有 return 任何东西。它可以是 UPDATE/PUT 只产生成功指示的网络调用。
无论如何,Completable 和 Single 都没有添加新功能,但它们引入了更健壮和简洁的 APIs,这说明了更多关于 API 公开的 Observable 背后的操作。
编辑:
RxJava2 Maybe
:
RxJava2增加了一个新的类型Maybe
,Maybe
是Completable
和Single的组合。
在与上面相同的语言中,Maybe
可以被认为是 return 的方法
Optional
某种类型,Optional
是 Object 的包装器,它明确地告诉我们是否有一些值 - Object
或没有(而不是 null)。
使用 Maybe
我们可以得到一些与 Single
完全相同的值,或者 return 什么都没有——就像 Completable
一样。此外,与两者一样,我们也有错误。
Maybe
当我们想要标记一个 Observable
可能没有值并且只会完成时,它是有价值的。
一个例子将从缓存中获取,我们不一定在缓存中有一个值,所以在这种情况下,我们将完成,o.w。我们将从缓存中获取 onNext
的值。
这也值得用 RxJava2 处理流中的非空值。
RxJava2 Flowable
:
首先,让我们定义背压。背压是一种处理数据生成速度快于处理速度的情况的方法。 Flowable
具有背压支持,允许下游请求项目。您可以阅读更多关于差异的信息 here.
- Flowable 和 Observable 可以表示有限流或无限流。 可流动支撑 背压.
- Single 是具有单个元素的流。
- 可能 是具有 0 个或 1 个元素的流。
- 最后一个 Completable 表示一个没有元素的流,即它 只能在没有值的情况下完成或失败。
我在 RXJava 部分 here 找到了一个简洁的答案。
单&单观察者
Single
总是只发出一个值或抛出错误。 Single
始终确保有发射。
Single 的一个用例是进行网络调用以获取响应,因为将立即获取响应。
注意这里,SingleObserver
没有 onNext() 来发送数据,而是在 onSuccess(Note note)
方法中接收数据。
Completable & CompletableObserver
Completable
observable 不会发出任何数据,而是通知任务的状态 success
或 failure
。当您想要执行某些任务而不期望任何值时,可以使用此 observable。
一个用例是通过发出 PUT 请求更新服务器上的一些数据。