为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第10天 开源框架 RxJava 源码解读

标签:
Android

课程名称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() 操作符实现缓存功能,具体的实现过程是:

  1. 通过 concat() 合并 memory、disk、network 3个被观察者的事件(即检查内存缓存、磁盘缓存、发送网络请求),并将它们按顺序串联成队列。
  2. 通过 firstElement(),从串联队列中取出并发送第1个有效事件(Next事件),即依次判断检查 memory、disk、network。
  3. 将最终的数据传递给订阅的观察者。

课程收获

有别于其它的讲解 RxJava 的视频课程,这一章没有一上来就讲解 RxJava 丰富的操作符,而是从全局的角度概括性的讲解了 RxJava 的组成,并重点讲解了 RxJava 三级缓存的实现机制,对于实际开发中设计缓存框架,能够提供一些指导。

图片描述
图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消