RxJava 3 新不同 - 6

184 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

组件移动

Disposables

移动到Java 8和Android脱糖工具允许了静态接口方法而非另外的工厂类的使用. 支持类io.reactivex.disposables.Disposables是移动所有方法到Disposable接口本身(io.reactivex.rxjava3.disposables.Disposable)的主要候选.

工厂方法的使用:

Disposable d = Disposables.empty();

现在应该换成:

Disposable d = Disposable.empty();

DisposableContainer

在RxJava 2.x内部, 使用disposable容器抽象而非到处使用CompositeDisposable, 这允许了更准确容器类型的使用. 这和其它内部组件一样, 是通过内部的DisposableContainer而实现的, 而DisposableContainer又被CompositeDisposable实现. 然而不幸的是, 因为public类引用了内部接口, RxJava正在OSGi环境下触发警告.

在RxJava 3, DisposableContainer是public接口的一部分, 处于io.reactivex.rxjava3.disposables.DisposableContainer, 并且不再解决OSGi问题.

API推荐

RxJava 2.2.x依然有不少实验性质操作符(但没有beta性质)的操作符, 这些实验性质操作符已经成为3.x中的标准操作符:

Flowable推荐

Observable推荐

Maybe推荐

Single推荐

Completable推荐

更多的API

RxJava 3在API层面接收了相当大数量的新操作符和方法. 引入的全部操作符标有image, 这些记号在它们相关的 Available in: 列表下

replay拥有eagerTruncate

Available in:  image Flowableimage Observableimage Maybeimage Singleimage Completable

replay操作符的一个限制是: 允许向慢消费者发送连续的数据项, 缓存数据项链接必须得维护. 默认情况下, 链表头节点在边界条件(大小, 时间)强制执行时, 会向前移动. 这种设置避免了在链表中保留一个“不可见”项的情况下进行分配. 然而, 有时这种保留是不需要的, 干净节点的分配开销是可以接受的. 在2.x中, ReplaySubjectReplayProcessor已经允许这些行为, 但实例replay()操作符却不允许.

有了3.x, replay操作符(包含connectable和multicasting变体)接受重载, 通过定义eagerTruncate选项, 执行这种类型的头节点清理.

Flowable

Observable

引用

RxJava 3 新不同 - 1

RxJava 3 新不同 - 2

RxJava 3 新不同 - 3

RxJava 3 新不同 - 4

RxJava 3 新不同 - 5

RxJava 3 新不同 - 6

RxJava 3 新不同 - 7

RxJava 3 新不同 - 8