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

【九月打卡】第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 点赞

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

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
11
获赞与收藏
16

关注作者,订阅最新文章

阅读免费教程

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消