3.RxJava2.x与RxJava1.x的差异对比

rxjava 专栏收录该内容
7 篇文章 0 订阅

欢迎大家加入QQ群一起讨论: 489873144(android格调小窝)
我的github地址:https://github.com/jeasonlzy

RxJava2的使用步骤差异

  1. 第一步:初始化一个Observable
    (RxJava)

    (RxJava2)

  2. 第二步:初始化一个Observer
    (RxJava)

    (RxJava2)

  3. 第三部:建立订阅关系
    (RxJava)

    (RxJava2)

区别:

  1. Observer中多了一个回调方法onSubscribe,传递参数为Disposable ,Disposable这个单词的字面意思是一次性用品,用完即可丢弃的.相当于RxJava1.x中的Subscription,用于解除订阅。 那么在RxJava2.x中怎么去理解它呢, 可以把观察者和被观察者理解为两根水管, Disposable就是两根管道之间的一个机关, 当调用它的dispose()方法时, 它就会将两根管道切断, 从而导致下游收不到事件.
    注意: 调用dispose()并不会导致上游不再继续发送事件, 上游会继续发送剩余的事件.

    你可能纳闷为什么不像RxJava1.x中订阅时返回Disposable,而是选择回调出来呢。官方说是为了设计成Reactive-Streams架构。不过仔细想想这么一个场景还是很有用的,假设Observer需要在接收到异常数据项时解除订阅,在RxJava2.x中则非常简便,只需要将回调中的Disposable对象保存成成员变量,onError中取消即可。

  2. RxJava的订阅方法的重载形式如下:

    RxJava2的订阅方法重载形式如下:
    不带任何参数的subscribe() 表示下游不关心任何事件,你上游尽管发你的数据去吧, 老子可不管你发什么.
    带有一个Consumer参数的方法表示下游只关心onNext事件, 其他的事件我假装没看见,
    其他几个方法同理, 这里就不一一解释了.

    相比以前RxJava来看,使用新的Consumer接口替代以前的Action1接口做不完整回调,命名更加亲切

  3. RxJava2中没有了一系列的ActionX/FunX接口,大多参照了Java8,取代接口如下:
    Consumer即消费者,用于接收单个值
    BiConsumer则是接收两个值
    Function用于变换对象
    Predicate用于判断。

    其中Action类似于RxJava1.x中的Action0,区别在于Action允许抛出异常。

背压差异

在RxJava1.x中,处理背压是在Observable中完成的,有如下几种策略。

在RxJava2.x中,使用了一个全新的类Flowable来专门处理背压,以前的Observable则已经没有背压的处理能力了,Flowable具有以下五种处理背压的方式:

可以在创建的时候直接指定背压策略:

也可以像RxJava1.x中一样,在链中使用操作符控制如下:

其中还需要注意的一点在于,下游Subscriber中的的onSubscribe方法中传给我们的不再是Disposable了, 而是Subscription, 它俩有什么区别呢, 首先它们都是上下游中间的一个开关, 之前我们说调用Disposable.dispose()方法可以切断水管, 同样的调用Subscription.cancel()也可以切断水管, 不同的地方在于Subscription增加了一个void request(long n)方法,并且Flowable并不是订阅就开始发送数据,而是需等到执行Subscription.request()才能开始发送数据。当然,使用简化subscribe订阅方法会默认指定Long.MAX_VALUE。手动指定的例子如下:

其他差异

RxJava2中的SingleObserver比RxJava1.x多了一个回调方法onSubscribe。

RxJava2中的CompletableObserver比RxJava1.x多了一个回调方法onSubscribe。

Processor与Subject
看看他们的继承结构如下,可以看出来Subject是RxJava1.x中就有的,继承自Observable,所以不支持背压,Processor是RxJava2.x中新加入的,所以支持背压,此外,在用法上,并没有太多差距。


如果你觉得好,对你有过帮助,请给我一点打赏鼓励吧,一分也是爱呀!

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值