任何人都可以用明确的例子解释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 次 |
| 最近记录: |