本文已参与「新人创作礼」活动,一起开启掘金创作之路。
简介
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.0
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文档可以在下面链接找到:
特定子版本的文档在版本标识下可访问, 例如:
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后向兼容.