开原框架RxJava
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相关推荐
- android novate乱码,Android RxJava+Retrofit2+RxBinding
Android RxJava+Retrofit2+RxBinding 本文原创,转载请注明出处.欢迎关注我的 简书. 安利一波我写的开发框架:MyScFrame喜欢的话就给个Star 前言: 之前写了 ...
- java基本框架代码_Rxjava 源码系列 - 基础框架分析
前言 本篇博客讲解的 Rxjava 的原理基于版本 2.1.4,RxAndroid 的原理的版本基于 2.0.2 . 基本框架 Rxjava 有四个基本的概念 Observable (可观察者,即被观 ...
- 开源集锦(五)开源框架和快速开发工具类
Volley https://github.com/stormzhang/AndroidVolley http://blog.csdn.net/t12x3456/article/details/922 ...
- Android最好用的项目框架搭建
本篇先记录下当前项目中涉及的主要技术要点.也算是对所作项目的一次总结.如果这个过程能对你有些许的帮助,那可能就显得有意义点了. 一个完整的Android项目会涉及后台和前端.我们只关注于前端,也就是我 ...
- APP全流程框架总结
一.产品设计 产品设计七层自检模型 <用户心理学> 冯·雷斯托夫效应(Von Restorff effect)(也称为隔离效应)预测当存在多个相似对象时,不同于其他对象的是最容易被记住的! ...
- Rxjava 学习总结
https://www.jianshu.com/p/52cd2d514528 RxJava的使用(三)转换--map.flatMap https://blog.csdn.net/wenyingzhi/ ...
- Android常用优秀开源框架整理
转载brave-sailor大神的笔记,自己记录一份,便于查阅 前言 AOSF:全称为Android Open Source Framework,即Android优秀开源框架汇总.包含:网络请求okh ...
- Android常用框架收藏!!!
Android常用框架 1.网络请求框架 2.图片下载框架 3.轻量级数据库 4.沉浸式状态栏 5.异步链式框架 6.组件/模块路由,通信框架 7.插件化框架 8.热修复框架 9.注解 10.JSON ...
- Android--最新常用框架
1.网络请求框架 okhttp OkGo retrofit 2.图片下载框架 glide picasso coil 是Android上的一个全新的图片加载框架,它的全名叫做coroutine i ...
最新文章
- swift支持多线程操作数据库类库-CoreDataManager
- VMware下redhat9.0的上网设置
- How to stop worrying & start living
- linux sort 命令详解(转 )
- 超全荧光定量PCR应用常见问题
- servlet的几个函数
- ddr读时序波形_测试新体验|如何解决DDR内存系统测试难题?
- android视频播放器api,03.视频播放器Api说明
- android实例化一个活动,Android活动 - 无法实例化活动组件信息
- relative会脱离文档流吗_抖音投放你会吗?选Feed流还是Dou+?
- 邮箱管理系统 -- 【课程设计】 idea; MVC; mysql;jsp
- Renesas:RH850G3KH 2.0内核简单知识整理
- echart 世界地图发光_echart世界地图(并且指定国家高亮显示)?
- 【随笔】稚晖君软件硬件环境总结
- 163手机登录邮箱显示服务器无法登录,163邮箱登陆不了_为何无法正常登录邮箱 ?...
- 十六进制与ascii码的互转(c语言),十六进制与ASCII码转换
- Ubuntu linux下运行xv6
- 【SRS】ATC模式和时间抖动矫正
- msgbox窗口学习总结窗体复合框
- linux 下的 wchar_t