有没有人能用清晰的例子来解释一下 RxJava 中可观察的、完整的和单一的三者之间的区别?
在哪种情况下,我们使用一个比其他?
Observable是通用的 ReactiveX 构建块,它是随时间发出值的事件源的构建块。(因此存在于 ReactiveX 扩展到的每种语言中) 简而言之,可观测的事件包括: OnNext * (onCompleted | onError) ?/(* 0或更多?-0或1)
Observable
Single 和 Completable是 RxJava 专门引入的新类型,它们代表简化的 Observable类型,具有更简洁的 API。
Single
Completable
Single表示发出单个值或错误的 Observable。
Completable表示不发出值但只发出终端事件(onError或 onCompleted)的 Observable
onError
onCompleted
你可以把这些不同想象成返回的方法的不同:
对象集合-可观察
单一物体-单一
和不返回值的方法(void 方法)-可完成。
当你使用面向任务的可观察值并且期望只有一个值时,比如网络请求只执行一次并返回值(或者错误) ,网络调用只执行一次,这意味着你不希望它随着时间的推移返回额外的值。另一个例子是数据库获取数据操作。
当你有一个 Observable并且你不关心操作所产生的值,或者根本没有值的时候,Completable是合适的。 例如,更新缓存,操作可以成功或失败,但没有值。 另一个例子是一些长时间运行的 init 操作,它不返回任何东西。它可以是 UPDATE/PUT 网络调用,这只会导致成功指示。
在任何情况下,Completable 和 Single 都没有添加新的功能,但是他们引入了更健壮、更简洁的 API,这些 API 更多地说明了 API 公开的 Obable 背后的操作。
编辑:
Maybe
RxJava2 added a new type called Maybe, Maybe is the combination of Completable and Single.
在与上面相同的语言中,Maybe可以被看作是一个返回的方法 某种类型的 Optional,Optional是 Object 的一个包装器,它显式地告诉我们是否在 Object 中有一些值-Object或者没有(而不是 null)。 使用 Maybe,我们可以得到一些与 Single完全相同的值,也可以不返回任何值——就像 Completable一样。此外,像两者一样,我们也有错误。 当我们想要标记一个 Observable可能没有值并且只是完成时,Maybe是有价值的。 从缓存中获取一个示例,我们不一定在缓存中有一个值,因此在这种情况下,我们将完成,o.w. 我们将从缓存中获取具有该值的 onNext。 这对于在使用 RxJava2的流中处理非空值也很有价值。
Optional
Object
onNext
Flowable
首先,让我们定义背压。反向压力是一种处理数据生成速度快于处理速度的情况的方法。Flowable有背压支持,允许下游请求项目。你可以阅读更多关于差异 给你。
我在 RXJava 部分找到了一个简明的答案 给你。
单身及单身观察者
Single始终只发出一个值或抛出一个错误。 Single始终确保有一个发射。
Single 的一个用例是进行网络调用以获取响应,因为将立即获取响应。
注意这里,SingleObserver没有 onNext ()来发出数据,而是在 onSuccess(Note note)方法中接收数据。
SingleObserver
onSuccess(Note note)
完整和完整的观察者
可观察的 Completable不会发出任何数据,而是通知任务的状态,无论是 success还是 failure。当您希望执行某些任务而不期望任何值时,可以使用此可观察值。
success
failure
用例将通过发出 PUT 请求来更新服务器上的一些数据。