本文已参与「新人创作礼」活动,一起开启掘金创作之路。
组件移动
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层面接收了相当大数量的新操作符和方法. 引入的全部操作符标有, 这些记号在它们相关的 Available in: 列表下
replay拥有eagerTruncate
Available in:
Flowable,
Observable,
Maybe,
Single,
Completable
replay操作符的一个限制是: 允许向慢消费者发送连续的数据项, 缓存数据项链接必须得维护. 默认情况下, 链表头节点在边界条件(大小, 时间)强制执行时, 会向前移动. 这种设置避免了在链表中保留一个“不可见”项的情况下进行分配. 然而, 有时这种保留是不需要的, 干净节点的分配开销是可以接受的. 在2.x中, ReplaySubject和ReplayProcessor已经允许这些行为, 但实例replay()操作符却不允许.
有了3.x, replay操作符(包含connectable和multicasting变体)接受重载, 通过定义eagerTruncate选项, 执行这种类型的头节点清理.
Flowable
replay(int, boolean)replay(long, TimeUnit, Scheduler, boolean)replay(int, long, TimeUnit, Scheduler, boolean)replay(Function, int, boolean)replay(Function, long, TimeUnit, Scheduler, boolean)replay(Function, int, long, TimeUnit, Scheduler, boolean)
Observable
replay(int, boolean)replay(long, TimeUnit, Scheduler, boolean)replay(int, long, TimeUnit, Scheduler, boolean)replay(Function, int, boolean)replay(Function, long, TimeUnit, Scheduler, boolean)replay(Function, int, long, TimeUnit, Scheduler, boolean)