Rxjava
关键词:异步数据流 背压(控制流速) 观察者模式
原理:创建一个
Observable
来完成异步任务,组合使用各种不同的链式操作,来实现各种复杂的操作,最终将任务的执行结果发射给Observer
进行处理。-
用途:
- 简化异步程序的流程
- 使用近似于Java8的流的操作进行编程:因为想要在Android中使用Java8的流编程有诸多的限制,所以我们可以使用RxJava来实现这个目的。(链式操作)
-
依赖:
compile 'io.reactivex.rxjava2:rxjava:2.2.0' compile 'io.reactivex.rxjava2:rxandroid:2.0.2'
-
三部曲
- 初始化Observable
- 初始化Observer
- 建立订阅关系
-
操作符
map:将一个 Observable 对象通过某种关系转换为另一个Observable 对象
-
flatmap:
flatMap
操作符可以将一个发射数据的Observable
变换为多个Observables
,然后将它们发射的数据合并后放到一个单独的Observable
一个数据(菜单列表)-----多个(菜的详情)-----一个(所有菜的详情的集合)
-
concat:concat 可以做到不交错的发射两个甚至多个 Observable 的发射事件,并且只有前一个 Observable 终止(onComplete) 后才会订阅下一个 Observable
利用 concat 的必须调用 onComplete 后才能订阅下一个 Observable 的特性,我们就可以先读取缓存数据,倘若获取到的缓存数据不是我们想要的,再调用 onComplete()以执行获取网络数据的 Observable,如果缓存数据能应我们所需,则直接调用 onNext(),防止过度的网络请求,浪费用户的流量。
zip:操作符可以将多个
Observable
的数据结合为一个数据源再发射出去interval:轮训(间隔任务)