RxJava 提供了一系列操作符,可以使用它们来过滤(Filter)、选择(select)、变换(transform)、结合(combine)和组合(compose)多个 Observable,这些操作符让执行和复合变得非常高效!
RxJava 使用 3 步走:
因此,这三者缺一不可,只有使用了 subscribe 被观察者才会开始发送数据。
类型 | 描述 |
---|---|
Observable | 能够发射 0或 n 个数据,并以成功或错误事件终止 |
Flowable | 能够发射 0或 n 个数据,并以成功或错误事件终止,支持背压,可以控制数据源发射的速度 |
Single | 只发射单个数据或错误事件 |
Completable | 从来不发射数据,只处理 onComplete 和 onError 事件,可以看成 Rx 的Runnable |
Maybe | 能够发射 0 或 1个数据,要么成功,要么失败,有点类似于 Optional |
操作符 | 用途 |
---|---|
doOnSubscribe | 一旦观察者订阅了 Observable,他就会被调用 |
doOnLifecycle | 可以在观察者订阅之后,设置是否取消订阅 |
doOnNext | 它产生的 Observable 每发射一项数据就会调用它一次,它的 Consumer 接受发射的数据项,一般用于在 subscribe 之前对数据进行处理 |
doOnEach | 它产生的 Observable 每发射一项数据就会调用它一次,不仅包括 onNext,还有 onError 和 onCompleted |
doAfterNext | 在 onNext 之后执行,而 doOnNext 是在 onNext 之前执行 |
doOnComplete | 当它产生的 Observable 在正常终止调用 onComplete 时会被调用 |
doFinally | 当它产生的 Observable 终止之后被调用,无论是正常终止还是异常终止。doFinally 优先于 doAfterTerminate 的调用 |
doAfterTerminate | 注册一个 Action,当 onComplete 或 onError 时触发 |
Map 操作符的作用就是将 Observable 所发送送的信息进行格式转换或者处理转变为另外一个类型,然后发送给下游的 Observer。
传入一个数组或集合参数,将参数注入到 Flowable 中,仅此而已。
Filter 顾名思义,过滤器,可以过滤掉一部分不符合要求的事件,当上游给我们发送的数据超多,而下游需要的只是一些特定的数据,如果全部接收上游发送的数据,很容易造成 OOM, 为了避免 OOM 的出现。
just 是 RxJava 的创建操作符,用于创建一个 Observable,Consumer 是消费者,用于接收单个值。
do 操作符可以给 Observable 的生命周期的各个阶段加上一系列的回调监听,当执行到这一阶段时,回调就会被触发。