谁能用清晰的示例解释RxJava中Observable,Completable和Single之间的区别?
在哪种情况下,我们会使用另一种情况?
谁能用清晰的示例解释RxJava中Observable,Completable和Single之间的区别?
在哪种情况下,我们会使用另一种情况?
Answers:
Observable
是事件源的通用ReactiveX构建块,该事件源随时间发出值。(
在短时间内,ReactiveX扩展到的每种语言中都存在)(因此存在)可观察的事件是:
onNext *(onCompleted | onError)?/(*零或多个?-零或1)
Single
并且Completable
是RxJava专门引入的新类型,它们代表的简化类型Observable
,具有更简洁的API。
Single
表示Observable
发出单个值或错误。
Completable
表示Observable
不发出任何值,但仅发出终端事件,onError
或者onCompleted
您可以将差异视为返回的方法的差异:
对象集合-可观察
单个对象-单个
和不返回任何值的方法(无效方法)-可完成。
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
当我们想要标记an Observable
可能没有值并且将要完成时,它是有价值的。
将从缓存中获取一个示例,我们不一定在缓存中有一个值,因此在这种情况下,我们将完成,因为我们将从onNext
缓存中获取该值。
使用RxJava2处理流中的非null值也是值得的。
Flowable
:首先,让我们定义背压。背压是一种处理数据生成速度超过其处理速度的情况的方法。 Flowable
具有背压支持,允许下游请求物品。您可以在此处阅读更多有关差异的信息。
Maybe<T>
,从本质上讲是Single<T?>
?
Single
将其作为Completable
返回值吗?
我在RXJava部分找到了一个简洁的答案。