概述
RxJava是一个基于观察者模式设计的异步库(响应式编程),是ReactiveX的Java版本实现。
学习资料:
给 Android 开发者的 RxJava 详解
——扔物线
文章配套Samples:RxJavaSamples系列博客:
深入浅出RxJava(一:基础篇)
深入浅出RxJava ( 二:操作符 )
深入浅出RxJava ( 三–响应式的好处 )
深入浅出RxJava ( 四-在Android中使用响应式编程 )
——hi大头鬼hiRxJava使用场景小结
——THEONE10211024RxJava使用场景小结
——hi大头鬼hiRxJava-Android-Samples
——kaushikgopal开发技术前线:
NotRxJava懒人专用指南 :从代码的角度还原RxJava库的实现原理
——作者:Yaroslav Heriatovych 译者:RockoReactiveX中文翻译文档:操作符介绍
那些年我们错过的响应式编程
——很详细的介绍什么是响应式编程使用RxJava.Observable取代AsyncTask和AsyncTaskLoader
——通过比较介绍RxJava在异步处理上的优势RxJava部分操作符介绍
——水木川博客Awesome-RxJava :RxJava资源的总结分享
——hi大头鬼hiAndroid开发者们一定会喜欢的 RxJava.pdf: hi大头鬼hi的rxjava讲义pdf
大纲之操作符分类
创建操作
- Just : 将一个或多个对象
<T>
转换一个Observable,一次性发射出去 - From : 将一个
Iterable<T>
, 一个Future<T>
, 或者一个数组T[]
转换成一个Observable,一次性发射出去 - Repeat(repeatWhen): 重复发射指定数据或数据序列的Observable,repeatWhen用于指定重发条件
- Create: 创建一个新的Observable
- Defer: 当订阅者订阅才创建的Observable;每次都是全新的数据
- Range: 发射指定范围的整数序列的Observable
- Interval: 给定的时间间隔发射整数序列的Observable
- Empty/Never/Throw: 直接通知完成/什么都不做/直接通知错误 的Observable
- Timer: 在给定的延时之后发射单个数据的Observable
变换操作
- Map: 对序列的每一项都应用一个函数来变换,由
Observable<A> --> Observable<B>
- FlatMap(concatMap,flatMapIterable): 将Observable发射的数据集合变换为Observables集合,由
Observable<A> --> Observable<Observable<B>>
- SwitchMap: 和FlatMap不同的是它只发射最近的数据,丢弃之前的数据, 常用于解决显示与数据不同步的问题
- Buffer: 定期从Observable收集数据到一个集合,然后一次性发射
- GroupBy: 将Observable数据进行分组发射
- Scan: 对Observable发射的每一项数据应用一个函数,然后按顺序依次发射每一个值
- Window: 将Observable的数据分拆成一些Observable窗口,一次性发射出去
- Cast: 在发射之前将Observable发射的所有数据进行强制转换
过滤操作
- Filter(ofType): 通过一个Func来过滤数据,ofType用于指定class类型
- Take(TakeLast,takeLastBuffer):只发射开始的N项数据,其中TakeLast只发射最后的N项数据,其中takeLastBuffer将最后的N项数据当做单个数据发射
- Skip(SkipLast):跳过开始的N项数据,其中SkipLast跳过最后的N项数据
- Last(lastOrDefault):只发射最后的一项数据,其中lastOrDefault只发射最后的一项数据,如果Observable为空就发射默认值
- First(takeFirst,firstOrDefault):只发射第一项数据,其中firstOrDefault允许空值时发射默认值
- ElementAt(elementAtOrDefault):发射第N项数据,elementAtOrDefault允许默认值
- Sample(sample,throttleLast):定期发射Observable最近的数据,和ThrottleFirst相反
- ThrottleFirst: 定期发射这个时间段里源Observable发射的第一个数据,常用于Button的去重发点击
- Distinct(distinctUntilChanged): 过滤掉重复数据,其中distinctUntilChanged用于过滤连续重复的数据
- IgnoreElements: 丢弃所有的正常数据,只发射错误或完成通知
组合操作
- StartWith: 在数据序列的开头增加一项数据,可接受一个Iterable或者多个Observable作为函数的参数。
- Merge(mergeDelayError): 将多个Observable合并,mergeDelayError让onError发生在数据合并并发射完成之后
- Zip(zip,zipwith):组合多个Observable,然后再发射
- And/Then/When: rxjava-joins 包中的内容,通过模式和计划组合多个Observables
- CombineLatest: 当两个Observables中的任何一个发射了一个数据时,通过一个指定的函数组合每个Observable发射的最新数据(一共两个数据),然后发射这个函数的结果,常用语登录;注册等场景下
- Join(join/groupJoin): 某个Observable在自己的时间窗口内都有有效的,就会拿来组合。
- Switch(switchOnNext): 将一个发射Observables的Observable转换成另一个Observable,并发射最近发射的数据
错误处理
- Catch: 包括OnErrorReturn,OnErrorResume和OnExceptionResumeNext
- Retry: 包括etry(long) 和 retryWhen,其中retry返回布尔值,retryWhen触发onError后开始重试
辅助操作
- Materialize/Dematerialize:将OnNext/OnError/OnComplete都转化为一个Notification对象并按照原来的顺序发射出来,Dematerialize则相反
- Timestamp/TimeInterval:给Observable发射的每个数据项添加一个时间戳,TimeInterval定期发射数据
- ObserveOn/SubscribeOn/Subscribe:线程切换和订阅操作
- Delay(delay,delaySubscription):延时发射,其中delaySubscription是延时注册
- Using: 创建一个只在Observable生命周期存在的资源
- Single: 返回单个数据
- Timeout: 给Observable加上超时时间
- Do: 类似生命周期方法,在Rx执行的各个阶段添加监听,包括DoOnNext,DoOnComplete等
- To: 将Observable转换为另一个对象或数据结构,包括toList,toFuture等实现
- Serialize: 强制Observable按次序发射数据
- cache(replay): 记住Observable发射的数据序列并发射相同的数据序列给后续的订阅者
算术聚合连接及自定义操作
其中自定义操作,主要依靠compose及lift操作