与RxJava1区别
操作符
创建操作符
- create:创建一个被观察者
- just:创建一个被观察者,并发送事件,发送的事件不可以超过10个以上
- From
- fromArray:这个方法和 just() 类似,只不过 fromArray 可以传入多于10个的变量,并且可以传入一个数组。
- fromCallable:这里的 Callable 是 java.util.concurrent 中的 Callable,Callable 和 Runnable 的用法基本一致,只是它会返回一个结果值,这个结果值就是发给观察者的
- fromFuture:参数中的 Future 是 java.util.concurrent 中的 Future,Future 的作用是增加了 cancel() 等方法操作 Callable,它可以通过 get() 方法来获取 Callable 返回的值
- fromIterable:直接发送一个 List 集合数据给观察者
- defer:这个方法的作用就是直到被观察者被订阅后才会创建被观察者
- timer:当到指定时间后就会发送一个 0L 的值给观察者
- interval:每隔一段时间就会发送一个事件,这个事件是从0开始,不断增1的数字
- intervalRange:可以指定发送事件的开始值和数量,其他与 interval() 的功能一样
- range:同时发送一定范围的事件序列
- rangeLong:作用与 range() 一样,只是数据类型为 Long
- empty() : 直接发送 onComplete() 事件
- never():不发送任何事件
- error():发送 onError() 事件
转换操作符
- map:可以将被观察者发送的数据类型转变成其他的类型
- flatMap:这个方法可以将事件序列中的元素进行整合加工,返回一个新的被观察者
- concatMap:concatMap() 和 flatMap() 基本上是一样的,只不过 concatMap() 转发出来的事件是有序的,而 flatMap() 是无序的
- buffer:从需要发送的事件当中获取一定数量的事件,并将这些事件放到缓冲区当中一并发出
- groupBy:将发送的数据进行分组,每个分组都会返回一个被观察者
- scan:将数据以一定的逻辑聚合起来
- window:将指定数量的事件分为一组发送
组合操作符
- concat:可以将多个观察者组合在一起,然后按照之前发送顺序发送事件。需要注意的是,concat() 最多只可以发送4个事件
- concatArray:与 concat() 作用一样,不过 concatArray() 可以发送多于 4 个被观察者
- merge:这个方法与 concat() 作用基本一样,只是 concat() 是观察者之间串行发送事件,而 merge() 并行同时发送事件
- mergeArray:merge() 的作用是一样的,只是它可以发送4个以上的被观察者
- concatArrayDelayError:在 concatArray() 和 mergeArray() 两个方法当中,如果其中有一个被观察者发送了一个 Error 事件,那么就会停止发送事件,如果你想 onError() 事件延迟到所有被观察者都发送完事件后再执行的话,就可以使用
- mergeArrayDelayError
- combineLatest:与 zip() 类似,但是 combineLatest() 发送事件的序列是与发送的时间线有关的,当 combineLatest() 中所有的 Observable 都发送了事件,只要其中有一个 Observable 发送事件,这个事件就会和其他 Observable 最近发送的事件结合起来发送。所有事件都会发送,按时间顺序,和最近的结对
- combineLatestDelayError
- reduce:与 scan() 操作符的作用一致也是将发送数据以一定逻辑聚合起来,这两个的区别在于 scan() 每处理一次数据就会将事件发送给观察者,而 reduce() 会将所有数据聚合在一起才会发送事件给观察者。
- collect:将数据收集到数据结构当中
- startWith:在发送事件之前追加事件,追加一个事件。追加的事件会先发出
- startWithArray:追加多个事件
- count:返回被观察者发送事件的数量
功能操作符
- delay:延迟一段时间发送事件
- doOnEach:Observable 每发送一件事件之前都会先回调这个方法
- doOnNext:Observable 每发送 onNext() 之前都会先回调这个方法
- doAfterNext:Observable 每发送 onNext() 之后都会回调这个方法
- doOnComplete:Observable 每发送 onComplete() 之前都会回调这个方法
- doOnError:Observable 每发送 onError() 之前都会回调这个方法
- doOnSubscribe:Observable 每发送 onSubscribe() 之前都会回调这个方法
- doOnDispose:当调用 Disposable 的 dispose() 之后回调该方法
- doOnLifecycle:
- 在回调 onSubscribe 之前回调该方法的第一个参数的回调方法,可以使用该回调方法决定是否取消订阅。
- doOnLifecycle() 第二个参数的回调方法的作用与 doOnDispose() 是一样的。
- 如果再观察者onNext() 方法进行取消订阅操作后,doOnDispose() 和 doOnLifecycle() 都会被回调。
- 如果使用 doOnLifecycle 进行取消订阅,doOnDispose Action 和 doOnLifecycle Action 都不会回调
- doOnTerminate:在 onError 或者 onComplete 发送之前回调
- doAfterTerminate:onError 或者 onComplete 发送之后回调
- doFinally:在所有事件发送完毕之后回调该方法。doFinally() 和 doAfterTerminate() 区别就是在于取消订阅,如果取消订阅之后 doAfterTerminate() 就不会被回调,而 doFinally() 无论怎么样都会被回调,且都会在事件序列的最后。
- onErrorReturn:当接受到一个 onError() 事件之后回调,onError不会调用了,返回的值会回调 onNext() 方法,并正常结束该事件序列。
- onErrorResumeNext:当接收到 onError() 事件时,返回一个新的 Observable,并正常结束事件序列
- onExceptionResumeNext:与 onErrorResumeNext() 作用基本一致,但是这个方法只能捕捉 Exception。返回的值会回调 onNext() 方法,如果需要结束事件,需要手动调用onComplete
- retry:如果出现错误事件,则会重新发送所有事件序列。times 是代表重新发的次数,最后调用onError
- retryUntil:出现错误事件之后,可以通过此方法判断是否继续发送事件
- retryWhen:当被观察者接收到异常或者错误事件时会回调该方法,这个方法会返回一个新的被观察者。如果返回的被观察者发送 Error 事件则之前的被观察者不会继续发送事件,如果发送正常事件则之前的被观察者会继续不断重试发送事件。
- repeat:重复发送被观察者的事件,times 为发送次数
- repeatWhen:这个方法可以会返回一个新的被观察者设定一定逻辑来决定是否重复发送事件
- 如果新的被观察者返回 onComplete 或者 onError 事件,则旧的被观察者不会继续发送事件。
- 如果被观察者返回其他事件,则会重复发送事件
- subscribeOn:指定被观察者的线程,要注意的时,如果多次调用此方法,只有第一次有效
- observeOn:指定观察者的线程,每指定一次就会生效一次
- Schedulers.computation( ) 用于使用计算任务,如事件循环和回调处理
- Schedulers.immediate( ) 当前线程
- Schedulers.io( ) 用于 IO 密集型任务,如果异步阻塞 IO 操作。
- Schedulers.newThread( ) 创建一个新的线程
- AndroidSchedulers.mainThread() Android 的 UI 线程,用于操作 UI。
过滤操作符
- filter:通过一定逻辑来过滤被观察者发送的事件,如果返回 true 则会发送事件,否则不会发送
- ofType:可以过滤不符合该类型事件
- skip:过正序某些事件,count 代表跳过事件的数量
- skipLast:跳过正序的后面的事件
- distinct:过滤事件序列中的重复事件
- distinctUntilChanged:过滤掉连续重复的事件
- take:控制观察者接收的事件的数量
- takeLast:控制观察者只能接受事件序列的后面几件事情
- debounce:如果两件事件发送的时间间隔小于设定的时间间隔则前一件事件就不会发送给观察者
- throttleWithTimeout:同上
- firstElement:取事件序列的第一个元素
- lastElement:取事件序列的最后一个元素
- elementAt:指定取出事件序列中事件,但是输入的 index 超出事件序列的总数的话就不会出现任何结果。这种情况下,你想发出异常信息的话就用 elementAtOrError
- elementAtOrError
条件操作符
- all:判断事件序列是否全部满足某个事件,如果都满足则返回 true,反之则返回 false
- takeWhile:可以设置条件,当某个数据满足条件时就会发送该数据,反之则不发送
- skipWhile:可以设置条件,当某个数据满足条件时不发送该数据,反之则发送
- takeUntil:可以设置条件,当事件满足此条件时,下一次的事件就不会被发送了
- skipUntil:当 skipUntil() 中的 Observable 发送事件了,原来的 Observable 才会发送事件给观察者
- sequenceEqual:判断两个 Observable 发送的事件是否相同
- contains:判断事件序列中是否含有某个元素,如果有则返回 true,如果没有则返回 false
- isEmpty:判断事件序列是否为空
- amb:amb() 要传入一个 Observable 集合,但是只会发送最先发送事件的 Observable 中的事件,其余 Observable 将会被丢弃
- defaultIfEmpty:如果观察者只发送一个 onComplete() 事件,则可以利用这个方法发送一个值