1. RxJava 核心概念解析
1.1 响应式编程基础
RxJava 本质上是一个基于观察者模式的异步编程库。它通过"数据流"的概念,将事件、数据的变化和传递抽象成可观察的序列。这种编程范式特别适合处理Android开发中常见的异步操作,比如网络请求、数据库查询、UI事件等。
在传统回调方式中,我们通常需要为每个异步操作单独定义回调接口,代码结构容易变得混乱。而RxJava通过统一的Observable类型和丰富的操作符,让异步代码能够以声明式的方式串联起来,形成清晰的数据处理管道。
1.2 核心类型详解
1.2.1 Observable:事件流的基础
Observable是RxJava中最基础也是最常用的类型,它代表一个可以发射0到多个数据项的事件流。这种设计特别适合处理持续产生的事件,比如:
- 用户输入事件(如EditText文本变化)
- 传感器数据变化
- 实时数据推送
Observable的生命周期包含三个关键事件:
- onNext(T):发射一个数据项
- onComplete():标记事件流正常结束
- onError(Throwable):标记事件流因错误终止
重要特性:一个Observable一旦调用了onComplete或onError,就不会再发射任何数据。这是RxJava的"终止语义",确保事件流有明确的结束点。
1.2.2 Single:单次操作的优化
Single是Observable的特化版本,专为只需要单个结果的场景设计。它只有两个可能的输出:
- onSuccess(T):成功时发射单个结果
- onError(Throwable):失败时发射错误
这种设计让网络请求等单次操作的意图更加明确,避免了Observable可能发射多个值带来的混淆。
1.2.3 Completable:无返回值的操作
Completable专注于操作是否成功完成,不关心具体返回值。它只有两个状态:
- onComplete():操作成功完成
- onError(Throwable):操作失败
这种类型特别适合以下场景:
- 数据写入操作
- 远程过程调用
- 不需要返回值的API调用
1.2.4 Maybe:可选结果的操作
Maybe结合了Single和Completable的特性,适用于可能有结果也可能没有的操作。它有三种可能的输出:
- onSuccess(T):有结果时发射
- onComplete():无结果但操作成功完成
- onError(Throwable):操作失败
典型使用场景包括:
- 缓存查询(可能有缓存也可能没有)
- 条件查询(结果可能为空)
1.2.5 Flowable:支持背压的数据流
Flowable是Observable的增强版,专门处理可能产生大量数据或数据产生速度远快于消费速度的场景。它通过背压(Backpressure)机制,让消费者能够控制数据流的速度,避免内存溢出。
常见的背压策略包括:
- BUFFER:缓冲所有数据(可能OOM)
- DROP:丢弃无法处理的数据
- LATEST:只保留最新数据
- MISSING:不指定策略,由开发者处理
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. RxJava 基础使用
2.1 创建数据流
2.1.1 基本创建方式
RxJava提供了多种创建Observable的方式:
java复制// 1. 从已有值创建
Observable.just("Hello", "World");
// 2. 从集合创建
List<Integer> numbers = Arrays.asList(1, 2, 3);
Observable.fromIterable(numbers);
// 3. 范围创建
Observable.range(1, 10); // 1到10的整数
// 4. 间隔创建
Observable.interval(1, TimeUnit.SECONDS); // 每秒发射一个递增数字
2.1.2 自定义创建
对于更复杂的需求,可以使用create方法完全控制Observable的行为:
java复制Observable.create(emitter -> {
try {
// 手动发射数据
emitter.onNext(1);
emitter.onNext(2);
emitter.onComplete();
} catch (Exception e) {
emitter.onError(e);
}
});
注意事项:使用create时,必须正
