任何人都可以用明确的例子解释RxJava中Observable,Completable和Single之间的区别吗?
在哪种情况下我们使用其中一个?
yos*_*riz 223
Observable
是一般的ReactiveX构建块,它是随时间发送值的事件源.(并因此存在于ReactiveX扩展的每种语言中)
简而言之Observable事件是:
onNext*(onCompleted | onError)?/(*零或更多? - 零或1)
Single
并且Completable
是专门在RxJava中引入的新类型,它们代表减少类型Observable
,具有更简洁的API.
Single
表示Observable
发出单个值或错误.
Completable
表示Observable
没有值,但只发出终端事件,onError
或者onCompleted
你可以想到差异,比如返回的方法的差异:
对象集合 - 可观察
单个对象 - 单个
和返回无值的方法(void方法) - 可完成.
Single
当你有面向任务的Observable并且你期望单个值,比如执行一次的网络请求和返回值(或错误)时,网络调用是一次性操作,这意味着你不希望它返回其他值随着时间的推移.另一个例子是DB获取数据操作.
Completable
如果你有一个Observable
并且你不关心操作产生的价值,或者没有.例如,更新缓存,操作可以成功/失败,但没有值.
另一个例子是一些长时间运行的init操作,它不会返回任何内容.它可以是仅通过成功指示产生的UPDATE/PUT网络呼叫.
在任何情况下,Completable和Single都没有添加新功能,但它们引入了更强大和简洁的API,它们更多地讲述了API暴露的Observable背后的操作.
编辑:
Maybe
:RxJava2添加了一个名为的新类型Maybe
,Maybe
是Completable
和Single 的组合.
在上面这样的语言中,Maybe
可以被认为是一种返回Optional
某种类型的方法
,Optional
是一个围绕Object的包装器,它明确告诉我们是否有一些值 - Object
或者不是(而不是null).
随着Maybe
我们可以有一定的价值完全一样Single
或具有返回任何结果-就像Completable
.另外,和两者一样,我们有错误.
Maybe
当我们想要标记一个Observable
可能没有价值并且只是完成时,这是很有价值的.
一个例子将从缓存中获取,我们不一定在缓存中有一个值,所以在这种情况下,我们将完成,我们将从onNext
缓存中获取值.
这也值得使用RxJava2处理流中的非空值.
Flowable
:首先,让我们来定义背压.Backpressure是一种处理数据生成速度快于处理速度的方法. Flowable
具有背压支持,允许下游请求物品.您可以在此处阅读有关差异的更多信息.
归档时间: |
|
查看次数: |
20157 次 |
最近记录: |