RxJava想必大家都不陌生,我们先从它的设计模式了解。

Rxjava的设计模式

RxJava的设计模式采用的是观察者模式,但是又与我们一般的观察者模式不同,我们一般的观察者模式是这样的:

RxJava观察者模式:

从上图我们可以看出,RxJava是一个观察者,多个被观察者,而且观察者和被观察者之间的耦合度更低。

RxJava的核心思想

RxJava是怎么做到链式调用的呢,大致思想就是打包和拆包,当我们订阅后,就将我们的数据通过subscribeActual()一层层的打包,然后通过onNext()进行拆包,每一个打包操作就像是在中间放入一个卡片。

RxJava的Hook操作

通过onAssem进行Hook之后,我们可以监听整个项目的RxJava调用,以及其他操作处理。 当然RxJava在其他地方也有很多是Hook。

RxJava是如何做到线程切换的呢

我们以subscribeOn(Schedulers.io())为例,看它是如何使上面的代码在IO线程运行的。

observeOn(AndroidSchedulers.mainThread())是如何使其下面的代码在主线程中运行的:

关于RxJava中的背压策略 

Flowable 很多操作符内部都使用了背压策略, 从而避免过多的数据填满内部的队列. (Flowable 的默认队列是 128),这种有点类似生产者和消费者模式,两者中间也是由一个队列存放处理的数据,所以背压发生的场景一般都是在异步线程操作中。

背压策略的种类:

public enum BackpressureStrategy {/*** OnNext events are written without any buffering or dropping.* Downstream has to deal with any overflow.* <p>Useful when one applies one of the custom-parameter onBackpressureXXX operators.*/MISSING,/*** Signals a MissingBackpressureException in case the downstream can't keep up.*/ERROR,/*** Buffers <em>all</em> onNext values until the downstream consumes it.*/BUFFER,/*** Drops the most recent onNext value if the downstream can't keep up.*/DROP,/*** Keeps only the latest onNext value, overwriting any previous value if the* downstream can't keep up.*/LATEST

MISSING:

OnNext事件是在没有任何缓冲或删除的情况下写入的。下游必须处理任何溢流。
当应用一个自定义参数onBackpressureXXX运算符时非常有用。我们选择MISSING策略时可以在下游线程中指定一种策略,通过自定义参数onBackpressureXXX运算符。

ERROR:

发出缺少背压异常的信号,以防下游无法跟上。当队列中的数量超限时,抛出MissingBackpressureException异常

BUFFER:

缓冲所有onNext值,直到下游使用它。队列大小不设上限,但是当队列达到一定的数量的时候,会OOM。

DROP:

如果下游无法跟上,则删除最近的onNext值。当下游来不及处理时,抛弃将要入队的数据。

LATEST:

仅保留最新的onNext值,如果下游无法跟上,则覆盖任何以前的值。这个有点类似DROP,但是LATEST会将最新的需要处理的数据,覆盖之前之前要处理的数据,知道下游能够及时处理。

关于自定义操作符

自定义操作符的话,我们可以模仿RxJava现有的操作符改写。

开原框架RxJava相关推荐

  1. android novate乱码,Android RxJava+Retrofit2+RxBinding

    Android RxJava+Retrofit2+RxBinding 本文原创,转载请注明出处.欢迎关注我的 简书. 安利一波我写的开发框架:MyScFrame喜欢的话就给个Star 前言: 之前写了 ...

  2. java基本框架代码_Rxjava 源码系列 - 基础框架分析

    前言 本篇博客讲解的 Rxjava 的原理基于版本 2.1.4,RxAndroid 的原理的版本基于 2.0.2 . 基本框架 Rxjava 有四个基本的概念 Observable (可观察者,即被观 ...

  3. 开源集锦(五)开源框架和快速开发工具类

    Volley https://github.com/stormzhang/AndroidVolley http://blog.csdn.net/t12x3456/article/details/922 ...

  4. Android最好用的项目框架搭建

    本篇先记录下当前项目中涉及的主要技术要点.也算是对所作项目的一次总结.如果这个过程能对你有些许的帮助,那可能就显得有意义点了. 一个完整的Android项目会涉及后台和前端.我们只关注于前端,也就是我 ...

  5. APP全流程框架总结

    一.产品设计 产品设计七层自检模型 <用户心理学> 冯·雷斯托夫效应(Von Restorff effect)(也称为隔离效应)预测当存在多个相似对象时,不同于其他对象的是最容易被记住的! ...

  6. Rxjava 学习总结

    https://www.jianshu.com/p/52cd2d514528 RxJava的使用(三)转换--map.flatMap https://blog.csdn.net/wenyingzhi/ ...

  7. Android常用优秀开源框架整理

    转载brave-sailor大神的笔记,自己记录一份,便于查阅 前言 AOSF:全称为Android Open Source Framework,即Android优秀开源框架汇总.包含:网络请求okh ...

  8. Android常用框架收藏!!!

    Android常用框架 1.网络请求框架 2.图片下载框架 3.轻量级数据库 4.沉浸式状态栏 5.异步链式框架 6.组件/模块路由,通信框架 7.插件化框架 8.热修复框架 9.注解 10.JSON ...

  9. Android--最新常用框架

    1.网络请求框架 okhttp OkGo retrofit   2.图片下载框架 glide picasso coil  是Android上的一个全新的图片加载框架,它的全名叫做coroutine i ...

最新文章

  1. swift支持多线程操作数据库类库-CoreDataManager
  2. VMware下redhat9.0的上网设置
  3. How to stop worrying & start living
  4. linux sort 命令详解(转 )
  5. 超全荧光定量PCR应用常见问题
  6. servlet的几个函数
  7. ddr读时序波形_测试新体验|如何解决DDR内存系统测试难题?
  8. android视频播放器api,03.视频播放器Api说明
  9. android实例化一个活动,Android活动 - 无法实例化活动组件信息
  10. relative会脱离文档流吗_抖音投放你会吗?选Feed流还是Dou+?
  11. 邮箱管理系统 -- 【课程设计】 idea; MVC; mysql;jsp
  12. Renesas:RH850G3KH 2.0内核简单知识整理
  13. echart 世界地图发光_echart世界地图(并且指定国家高亮显示)?
  14. 【随笔】稚晖君软件硬件环境总结
  15. 163手机登录邮箱显示服务器无法登录,163邮箱登陆不了_为何无法正常登录邮箱 ?...
  16. 十六进制与ascii码的互转(c语言),十六进制与ASCII码转换
  17. Ubuntu linux下运行xv6
  18. 【SRS】ATC模式和时间抖动矫正
  19. msgbox窗口学习总结窗体复合框
  20. linux 下的 wchar_t

热门文章

  1. activity-3、数据表介绍
  2. php简单网页课程设计报告,PHP课程设计报告30634.doc
  3. mapgis10_10.31_接口学习1
  4. TCP-IP详解卷1-3分享
  5. 计算机组成原理分部实验,计算机组成原理实验指导书.doc
  6. GitLab——接受合并请求
  7. 中文版redis官方命令大全
  8. 淘宝直播技术干货:高清、低延时的实时视频直播技术解密
  9. OCR的java开源库
  10. php即时聊天数据库设计入门经典教程_用PHP+MySQL搭建聊天室