RxJava 3 新不同 - 1

290 阅读3分钟

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

简介

RxJava是面向Java VM的开源库, 对可观察序列进行异步编程和基于事件的编程.

与每一个这样的版本一样, 在整个代码库中都有相当多的琐碎和非琐碎的更改, 清理和改进, 尽管如此, 仍需要一些详细和全面的解释.

在每个主要版本中, 我们都会自由地引入潜在的和实际的二进制和行为不兼容的更改, 以便纠正过去的错误并偿还技术债务.

RxJava 2.x 现在处于维护模式

随着RxJava 3.0.0的发布, 先前的版本线, 2.2.x, 处于维护模式. 这意味着只有bug修复将会接受和应用; 不再接受和应用新的操作符文档变更.

RxJava 2.x将会被继续支持, 直到2021年2月28日, 此后该分支上的全部开发工作都将停止.

Maven coordinates

RxJava 3 所在组为io.reactivex.rxjava3, artifact ID为rxjava. 官方语言/平台的适配也将位于组io.reactivex.rxjava3下.

下面的示例演示了导入语句. 请考虑最新的版本并且将图标上的数字取代3.0.0Maven Central

Gradle导入

dependencies {
  implementation 'io.reactivex.rxjava3:rxjava:3.0.0'
}

Maven导入

<dependency>
  <groupId>io.reactivex.rxjava3</groupId>
  <artifactId>rxjava</artifactId>
  <version>3.0.0</version>
</dependency>

Java文档

不同组件的3.x文档可以在下面链接找到:

特定子版本的文档在版本标识下可访问, 例如:

(将标识上的数字取代3.0.0-RC9Maven Central).

Snapshot版本的文档位于:

Java 8

长久以来, 因为Android在运行时支持上的落后, RxJava API限制在Java 6. 随着Android Studio 4的到来, 这将发生改变, 因为desugaring进程将能够将许多Java 7和8的特性显著地兼容于Java 6.

这允许我们提升RxJava的基线到Java 8, 并且添加许多Java 8 构建的官方支持:

  • Stream: 将java.util.stream.Stream作为源使用或者将序列作为阻塞式 Stream暴露.
  • Collector: 将数据项聚合到standard transformations声明的集合.
  • Optional: 有助于RxJava的非空要求
  • CompletableFuture: 非阻塞式消费CompletableFuture或者将唯一的结果作为 CompletableFuture暴露.
  • 使用站点非空注释: 帮助一些函数在特定条件下能够返回null.

然而, 还是有一些特性不能支持:

  • java.time.Duration: 将添加大量的重载; 总是能够人工地解构成time + unit.
  • java.util.function: 不能抛出Throwable, 重载会造成膨胀和/或歧义

因此, 必须修改项目的编译目标到Java 8:

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

或者

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

关于内部Java 8支持的注意事项

由于Android Desugar工具的状态, 预先存在的, 与Java 8无关的RxJava操作符的内部不使用Java 8构造或类型. 这允许在Android API级别上使用这些“旧”操作符, 而desugaring工具不提供各种构造的自动Java 8后向兼容.

引用

RxJava 3 新不同 - 1

RxJava 3 新不同 - 2

RxJava 3 新不同 - 3

RxJava 3 新不同 - 4

RxJava 3 新不同 - 5

RxJava 3 新不同 - 6

RxJava 3 新不同 - 7

RxJava 3 新不同 - 8