如何让人大致理解RxJava思想:第一节 初步理解RxJava
如何让人大致理解RxJava思想:第一节 初步理解RxJava
首先,我们需要明确,一个人不可能一口气吃成一个胖子,你不可能仅仅花5分钟看完我这篇文章,然后一拍桌子,大叫一声,我知道了,然后赢取白富美,从此走上人生巅峰。很遗憾,一切东西都是需要循序渐进的!
为什么更多的人会选择前端,因为前端相对后端更加简单,而且有很多的框架,学习坡度也不陡峭。为什么Linux或者是C往往都让人望而却步,学习坡度陡峭啊,指数级增长。
不是很想说那些表象的,经验之谈,因为那些毫无意义,就好比,我做了一次实验,实验的结果是1+1=2,那么1+1就一定等于2吗?想理解事情永远都不能从表象去看,表象去研究什么多个observeOn()和subcribeOn()多个调用时,到底哪几个会有效果,这种实验说是实验,其实就是瞎猜,浪费时间罢了。
尝试去脱离代码吧,从思想开始,这时候你就会发现原本黑白色的代码世界就会刹那间拥有了色彩。
RxJava是什么,他是基于观察者模式的一根管道,将订阅者和被订阅者联系到了一起,他将被订阅者传输到了订阅者处。这里对于不知道观察者模式的童鞋深表遗憾,请自行百度。
在这里我问一个问题,为什么日常开发的时候,IDE会将整段RxJava代码标黄,极其恶心的标黄。当你加上.dispose()
方法之后,你会惊讶地发现,黄色消失了,这又是为什么呢?贴心的我帮你把百度这个英语的翻译的时间都省了。
此单词的意思为处置,也就是处理的意思,其作用的对象是Disposable,意为可处理的东西,此处指代的意思就是管道。那么为什么要处理管道呢?因为三者之间的引用关系,这里的引用关系可能不只有一种,为了避免本篇的篇幅过于冗长,就不过多赘述。既然三者之间存在着互相引用的关系,那么在回收对象的时候就有可能不能很好的回收,所以需要通过dispose()方法来斩断三者之间的关系。
然后看到这里,有些可爱的人就暗暗下定决心,那好,今后我只要遇到subscribe()方法就万分自觉地加上dispose()方法,这样总不会出问题了吧,求表扬!好的,奖励你请全组人吃饭!
本末不能倒置!你需要考虑一下执行dispose()时,你的业务到底有没有执行完毕啊= =,如果观察者还没有接收到数据,你就把管道给处理掉了,那你这饭请的的确不冤。
那么什么时候,这套观察者模式就开始启动了呢?答:当三者都集齐时。
注意,并不是调用subscribe()时三者就集齐了,最常见的例子就是RxAndroid对于视图事件的监控,调用subscribe方法时,用户可能什么事情都还没有做,你这个时候直接掐掉管道,那用户真的什么事情都做不了了。
所以,RxJava提供了一个类用来专门管理Disposable:CompositeDisposable
,在定义好一个管道后放入这个类中,然后在某个需要统一处理管道的时机(比如说Activity的onDestroy()),通过这个类统一进行处理就行了。你看这个类直接实现了Disposable,和Disposable一样调用dispose()方法就能回收了。
如何让人大致理解RxJava思想:第一节 初步理解RxJava相关推荐
- 递归第一弹:初步理解
说起递归,应该是让我头疼了很久的问题了,在各种问题里都能看见它,而且经常是代码很简单,楞是看不懂.. 关于递归的定义:一个函数自己调用自己,就是递归.对,和一个函数调用其他函数一样,只不过递归是通过反 ...
- 机器学习和深度学习之数学基础-线性代数 第一节 向量及线性映射
转自:https://blog.csdn.net/yong_bai/article/details/80033516 yong_bai 发布于2018-04-18 21:40:15 阅读数 1440 ...
- matlab温度数据怎么滤波_卡尔曼滤波算法思想理解 Kalman filter 第一篇
卡尔曼滤波算法思想理解 Kalman filter 第一篇 最近在初步的理解目标跟踪的领域, 其中一个非常经典的算法卡尔曼滤波Kalman filter是需要有很好的理解才行, 由于已经脱离了学校,懂 ...
- 抛开 Spring 去理解 IOC 思想:原来 IOC 容器这么简单
很多小伙伴们看到标题可能就会想到抛开 Spring 就不会存在 IOC 思想了,其实不然在接下来的文章中就会讲述到. 很多小伙伴在理解 IOC 的时候通常会和 Spring 放到一起去学习,首先呢 S ...
- ioc spring 上机案例_抛开Spring去理解IOC思想 - 原来IOC容器这么简单
很多小伙伴们看到标题可能就会想到抛开Spring就不会存在IOC思想了,其实不然在接下来的文章中就会讲述到. 很多小伙伴在理解IOC的时候通常会和Spring放到一起去学习,首先呢Spring设计的非 ...
- 《深入理解计算机系统》第一章
<深入理解计算机系统>第一章 一.概述 二.计算机系统各概念是对软硬件的**抽象**: 三.关于性能 该专栏是读<深入理解计算机系统>第三版后的总结和思考--基于个人知识背景和 ...
- 大型软件设计实验:多人点餐小程序—第一轮迭代报告
大型软件设计实验:多人点餐小程序-第一轮迭代报告 1 需求分析 2 产品定义 2.1 产品介绍 2.2 产品功能简介 3 开发平台 4 项目分工 5 产品设计 5.1 界面设计 5.2 数据库设计 6 ...
- 嵌入式系统硬件抽象层(HAL BSP)的设计思想--第一部分
嵌入式系统硬件抽象层(HAL & BSP)的设计思想--第一部分 1 前言 特点 1.1 层次化思想 1.2 模块化思想 1.3 对象化思想 2 板级支持包(BSP) 3 嵌入式系统硬件抽象层 ...
- 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈
理解堆与栈 导航 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 ...
最新文章
- Angular7中引用外部JS文件
- java代码的执行机制_关于java代码的执行机制
- 比好莱坞市场大6倍—— 体育因数据分析而不同
- python为什么中文要encoding-python 中文编码问题如何解决?
- leetcode71
- html博客页面实验报告,×××实验报告
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(2)-easyui构建前端页面框架[附源码]
- rancher中添加用户,赋予权限
- jiba中文分词原理
- python3爬取网易云歌单数据清洗_网易云音乐古风歌词统计分析
- c++ Dxgi+FFmpeg 完成对截图屏幕,以及将屏幕数据保存为MP4格式,以完成录屏功能
- java抓取豆瓣网页内容_爬虫实践--豆瓣电影当前上映电影信息爬取
- BIM+3DGIS的行业应用探讨
- Linux之进程管理——查看进程
- 05.前端面经汇总javaScript篇
- js的validate插件异步效验
- TP6框架全新开发社区系统源码开源
- 保密管理专业是学计算机的吗,计算机保密管理学习学习制度.docx
- 苹果微信验证失败,安卓成功_苹果将​​在微软失败的地方成功吗?
- C语言第五章实验原理,C语言第五章实验报告.docx
热门文章
- 如何比较浮点数相等_『GCTT 出品』Go 语言中的比较操作符
- Windows批处理脚本%1和%1%有区别吗?
- 有点意思!Linux 块设备处理模型,基础【簇、柱面、存储的计算】
- android mp3 lrc歌词文件utf-8歌词显示为乱码,Android读取本地json文件的方法(解决显示乱码问题)...
- 硬盘由于io设备错误无法运行此项请求_移动硬盘坏了真倒霉,祸不单行U盘也坏了,数据怎么存储才安全?...
- 起搏器可以用计算机吗,关于起搏器患者能否做核磁共振的最全说法
- 破解phpstorm2017.3.1版本并解决win10下修改hosts问题
- 【深度学习入门到精通系列】2D Unet3D Unet辨析
- 【系统分析与设计】业务流程图绘制方法
- python【力扣LeetCode算法题库】20- 有效的括号(辅助栈)