任何人都可以用明确的例子解释RxJava中Observable,Completable和Single之间的区别吗?
在哪种情况下我们使用其中一种?
答案 0 :(得分:193)
Observable
是事件源的通用ReactiveX构建块,它随时间发出值。 (因此存在ReactiveX扩展到的每种语言)
总之,可观察的事件是:
onNext *(onCompleted | onError)? /(*零或更多? - 零或1)
Single
和Completable
是RxJava专门引入的新类型,它们代表Observable
的简化类型,具有更简洁的API。
Single
表示发出单个值或错误的Observable
。
Completable
代表Observable
,不会发出任何价值,只会发出onError
或onCompleted
你可以想到差异,比如返回的方法的差异:
对象集合 - 可观察
单个对象 - 单个
和不返回值的方法(void方法) - 可完成。
Single
可能是合适的,比如执行一次的网络请求并返回值(或错误),网络调用是一次性操作的,这意味着你不要不希望它随着时间的推移返回额外的值。另一个例子是DB获取数据操作。
Completable
并且您不关心操作产生的值时, Observable
是合适的,或者没有。
例如,更新缓存,操作可以成功/失败,但没有值。
另一个例子是一些长时间运行的init操作,它不会返回任何内容。它可以是仅通过成功指示产生的UPDATE / PUT网络呼叫。
在任何情况下,Completable和Single都没有添加新功能,但它们引入了更强大,更简洁的API,它们更多地讲述了API暴露的Observable背后的操作。
修改强>
Maybe
: RxJava2添加了一个名为Maybe
的新类型,Maybe
是Completable
和Single的组合。
使用与上述相同的语言,可以将Maybe
视为返回的方法
Optional
某种类型的Optional
是Object的包装器,它明确告诉我们是否有一些值 - Object
或不是{(1)而不是null。
使用Maybe
,我们可以拥有与Single
完全相同的值,或者不返回任何内容 - 就像Completable
一样。另外,和两者一样,我们有错误
当我们想要标记Maybe
可能没有值并且只是完成时,Observable
很有价值。
一个例子将从缓存中获取,我们不一定在缓存中有一个值,所以在这种情况下,我们将完成,o.w。我们将使用缓存中的值获取onNext
这也值得使用RxJava2处理流中的非空值。
Flowable
:首先,我们来定义背压。 Backpressure是一种处理数据生成速度快于处理速度的方法。 Flowable
具有背压支持,允许下游请求物品。您可以阅读有关差异的更多信息here。
答案 1 :(得分:8)
我在RXJava部分找到了here的简明回答。
答案 2 :(得分:1)
单服务器和单服务器
Single
始终仅发出一个值或引发错误。 Single
始终确保有排放。
Single的一个用例是进行网络呼叫以获取响应,因为将立即获取响应。
请注意,SingleObserver
没有onNext()来发射数据,而是通过onSuccess(Note note)
方法接收数据。
Completable&CompletableObserver
Completable
不会发出任何数据,而是通知success
或failure
的任务状态。当您要执行某些任务而不希望有任何值时,可以使用此可观察值。
用例是通过发出PUT请求来更新服务器上的某些数据。