课程名称:BAT大牛亲授技能+技巧 Android面试快速充电升级
课程章节:Android基础相关面试问题
主讲老师:DocMike
课程内容
RxJava 是一种基于观察者模式的响应式编程框架,其中的主要角色包括 Observable(被观察者)、Observer(观察者)以及通过Subscribe(订阅)连接观察者和被观察者。
1.Observable(被观察者)
Observable 负责事件的生产。事件从创建到加工处理,再到被订阅者接收,就是一个个 Observable 形成的事件流。RxJava 的链式调用,每一步方法的调用,都会返回一个新的 Observable 给下一步。同样是链式调用,它与我们常见的 Builder 模式不太一样,每个操作符,每次线程切换,每步都会新建一个 Observable,而非直接加工上一步的Observable 返回给下一步。
2.Observer(观察者)
Observer 是事件的消费者,它会订阅 Observable 创建的事件,根据业务需要,加工成最终的结果。使用时需要重写它的 onNext(),onCompleted(),onError() 和 onSubscribe() 方法。
3.ObservableOnSubscribe 的 subscribe() 订阅
创建 ObservableOnSubscribe 对象时,需要重写其 subscribe() 方法。这里要注意与 Observable 的subscribe() 方法的区别。在调用链中有时会用到各种操作符进行一些变换,事实上每个操作符都会重写这么一个subscribe()方法。将准备好被订阅的数据,通过调用 subscribe() 参数中 ObservableEmitter 的 onNext(),onCompleted() 或 onError() 通知给观察者。
4.RxJava 的缓存机制
RxJava 的内存、磁盘、网络三级缓存机制。
- 设置第一个 Observable,用于检查内存缓存是否有对数据的缓存,如果有数据则直接发送,如果没有直接发送结束事件。
- 设置第二个 Observable,检查磁盘缓存是否有对数据的缓存,如果有数据则直接发送,如果没有则直接发送结束事件。
- 设置第三个 Observable,通过网络获取数据。
RxJava 通过 concat() 和 firstElement() 操作符实现缓存功能,具体的实现过程是:
- 通过 concat() 合并 memory、disk、network 3个被观察者的事件(即检查内存缓存、磁盘缓存、发送网络请求),并将它们按顺序串联成队列。
- 通过 firstElement(),从串联队列中取出并发送第1个有效事件(Next事件),即依次判断检查 memory、disk、network。
- 将最终的数据传递给订阅的观察者。
课程收获
有别于其它的讲解 RxJava 的视频课程,这一章没有一上来就讲解 RxJava 丰富的操作符,而是从全局的角度概括性的讲解了 RxJava 的组成,并重点讲解了 RxJava 三级缓存的实现机制,对于实际开发中设计缓存框架,能够提供一些指导。
共同学习,写下你的评论
评论加载中...
作者其他优质文章