美文网首页
RxJava之Observables类型理解

RxJava之Observables类型理解

作者: 小小的coder | 来源:发表于2020-06-18 22:44 被阅读0次
    image

    参考原文1:

    Observable — Operator — Observer

    Observable就像一个发声的扬声器。它会执行一些任务并发射(emit)一些值。
    Operator就像一个翻译机,将数据从一种形式翻译或者修改为另一种形式。
    Observer获得这些值。

    image

    RxJava中的Observables类型

    以下即为RxJava中不同的Observables类型

    • Observable
    • Flowable
    • Single
    • Maybe
    • Completable

    既然有不同的Observables类型,随之也有不同的Observers类型。如下:

    • Obeserver
    • SingleObserver
    • MaybeObserver
    • CompletableObserver

    现在就让我们来看看他们之间的区别和如何选择。

    Observable <> Observer

    此为最简单的Observable,可以发射不止一个值。
    举个栗子:比方说你正在下载一个文件,报告当前的下载进度。此时将会发射不止一个值。

    创建一个简单的Observable

    image

    对应的Observer

    image

    Flowable <> Observer

    Flowable 用于当Obserable发射很多的值时而Observer消费不过来的时候。
    这种情况下,Observable需要基于某种策略忽略一些值,否则将会抛出异常。
    Flowable Observable会通过某种策略来处理异常。
    这个策略为BackPressureStrategy,异常为MissingBackPressureException

    创建一个Flowable Observable

    与创建一个普通的Observable类似,你可以使用Flowable.create()来创建一个Flowable。

    对应Flowable Observable的Observer

    与普通的Observer基本一样。

    Single <> SingleObserver

    SIngle用于当Observable只需要发射一次值,比如网络请求的响应的时候。

    创建一个Single Observable

    image

    对应Single Observable的SingleObserver

    image

    Maybe <> MaybeObserver

    Maybe 用于当Observable发射一个值或没有值的时候。

    创建一个 Maybe Observable

    image

    对应Maybe Observable的MaybeObserver

    image

    Completable <> CompletableObserver

    Completable 用于Observable完成某个任务而不发射任何值得时候。

    创建一个 Completable Observable

    image

    对应Completable Observable的CompletableObserver

    image

    好啦,现在你该知道如何根据你的场景来选择哪一个Observable啦吧。

    RxJava是关于Reactive Extensions的java 虚拟机实现,它已成为Android开发的一项最重要的技能。
    翻译自Understanding Types Of Observables In RxJava

    RxJava的Single、Completable以及Maybe:
    https://juejin.im/post/597ff421f265da3e3a0bd6a0

    原文链接:https://www.jianshu.com/p/23e38e1fc4cc

    相关文章

      网友评论

          本文标题:RxJava之Observables类型理解

          本文链接:https://www.haomeiwen.com/subject/ctnpxktx.html