Rxjava2技术分享

2018-12-14  本文已影响3人  Yasin27878

1. 为什么要升级Rxjava2

1. 兼容Reactive Streams规范 官网

    Reactive Streams 是一种为异步流处理提供非阻塞压力的标准。

2. 更好的处理BackPressure的情况--- Flowable

    背压,即生产者的速度大于消费者的速度带来的问题
   使用Flowable我们需要定义它的事件处理策略(缓存,丢弃,报错)

3. 拥有比Rxjava1更好的性能

image

2 .Rxjava1到Rxjava2有哪些变化

1.Nulls

    这是一个很大的变化,熟悉 RxJava 1.x 的童鞋一定都知道,1.x 是允许我们在发射事件的时候传入 null 值的
    ,但现在 2.x 不支持了,直接抛 NullPointerException 。

2. Observable->Observable,Flowable

1.)基本对比

- rxjava1的Observable支持背压 通过.onBackpressureXXX使得支持背压 订阅关系  Observable subscribe Observer(new Acition1)
- rxjava2的Observable不支持背压 他的订阅关系Observable->subscribe ->Observer(new Consumer)
- rxjava2 的为了支持背压 订阅关系 Flowable->subscribe->Subscriber(new Consumer)
    
2.)发射世界和接收事件满足的条件
- 上游可以发送无限个onNext, 下游也可以接收无限个onNext.
- 当上游发送了一个onComplete后, 上游onComplete之后的事件将会继续发送, 而下游收到onComplete事件之后将不再继续接收事件.
- 当上游发送了一个onError后, 上游onError之后的事件将继续发送, 而下游收到onError事件之后将不再继续接收事件.
- 上游可以不发送onComplete或onError.
- 最为关键的是onComplete和onError必须唯一并且互斥, 即不能发多个onComplete, 也不能发多个onError, 也不能先发一个onComplete, 然后再发一个onError, 反之亦然

3.调度器的变化

- Schedulers.io() 代表io操作的线程, 通常用于网络,读写文件等io密集型的操作
- Schedulers.computation() 代表CPU计算密集型的操作, 例如需要大量计算的操作
- Schedulers.newThread() 代表一个常规的新线程
- Scheduiers.trampoline() 代表不是立即执行而是加入到队列它是repeat()和retry()的默认调度器
- Schedulers.immediate()  代表在当前线程操作(2.X 取消)

- AndroidSchedulers.mainThread() 代表Android的主线程

4.Function相关

在1.x 中是有 Func1,Func2.....FuncN的,但 2.x 中将它们移除,而采用 Function 替换了 Func1,采用 BiFunction 替换了 Func 2..N。并且,它们都增加了 throws Exception,也就是说,不用担心我们做某些操作还需要 try-catch 了。

5. 观察者的接口实 Observer对比Subscriber

Observer(rx1) Subscription CompositeSubscription

Subscriber(rx2) Disposable CompositeDisposable

3.Rxjava2中一些强大功能和应用场景

4.RxJava1.x 如何平滑升级到RxJava2.x?

由于RxJava2.x变化较大无法直接升级,幸运的是,官方开发者提供了RxJava2Interop这个库,可以方便地将RxJava1.x升级到RxJava2.x,或者将RxJava2.x转回RxJava1.x。地址:https://github.com/akarnokd/RxJava2Interop

上一篇 下一篇

猜你喜欢

热点阅读