如何让人大致理解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相关推荐

  1. 递归第一弹:初步理解

    说起递归,应该是让我头疼了很久的问题了,在各种问题里都能看见它,而且经常是代码很简单,楞是看不懂.. 关于递归的定义:一个函数自己调用自己,就是递归.对,和一个函数调用其他函数一样,只不过递归是通过反 ...

  2. 机器学习和深度学习之数学基础-线性代数 第一节 向量及线性映射

    转自:https://blog.csdn.net/yong_bai/article/details/80033516 yong_bai 发布于2018-04-18 21:40:15 阅读数 1440  ...

  3. matlab温度数据怎么滤波_卡尔曼滤波算法思想理解 Kalman filter 第一篇

    卡尔曼滤波算法思想理解 Kalman filter 第一篇 最近在初步的理解目标跟踪的领域, 其中一个非常经典的算法卡尔曼滤波Kalman filter是需要有很好的理解才行, 由于已经脱离了学校,懂 ...

  4. 抛开 Spring 去理解 IOC 思想:原来 IOC 容器这么简单

    很多小伙伴们看到标题可能就会想到抛开 Spring 就不会存在 IOC 思想了,其实不然在接下来的文章中就会讲述到. 很多小伙伴在理解 IOC 的时候通常会和 Spring 放到一起去学习,首先呢 S ...

  5. ioc spring 上机案例_抛开Spring去理解IOC思想 - 原来IOC容器这么简单

    很多小伙伴们看到标题可能就会想到抛开Spring就不会存在IOC思想了,其实不然在接下来的文章中就会讲述到. 很多小伙伴在理解IOC的时候通常会和Spring放到一起去学习,首先呢Spring设计的非 ...

  6. 《深入理解计算机系统》第一章

    <深入理解计算机系统>第一章 一.概述 二.计算机系统各概念是对软硬件的**抽象**: 三.关于性能 该专栏是读<深入理解计算机系统>第三版后的总结和思考--基于个人知识背景和 ...

  7. 大型软件设计实验:多人点餐小程序—第一轮迭代报告

    大型软件设计实验:多人点餐小程序-第一轮迭代报告 1 需求分析 2 产品定义 2.1 产品介绍 2.2 产品功能简介 3 开发平台 4 项目分工 5 产品设计 5.1 界面设计 5.2 数据库设计 6 ...

  8. 嵌入式系统硬件抽象层(HAL BSP)的设计思想--第一部分

    嵌入式系统硬件抽象层(HAL & BSP)的设计思想--第一部分 1 前言 特点 1.1 层次化思想 1.2 模块化思想 1.3 对象化思想 2 板级支持包(BSP) 3 嵌入式系统硬件抽象层 ...

  9. 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈

    理解堆与栈 导航 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 ...

最新文章

  1. Angular7中引用外部JS文件
  2. java代码的执行机制_关于java代码的执行机制
  3. 比好莱坞市场大6倍—— 体育因数据分析而不同
  4. python为什么中文要encoding-python 中文编码问题如何解决?
  5. leetcode71
  6. html博客页面实验报告,×××实验报告
  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(2)-easyui构建前端页面框架[附源码]
  8. rancher中添加用户,赋予权限
  9. jiba中文分词原理
  10. python3爬取网易云歌单数据清洗_网易云音乐古风歌词统计分析
  11. c++ Dxgi+FFmpeg 完成对截图屏幕,以及将屏幕数据保存为MP4格式,以完成录屏功能
  12. java抓取豆瓣网页内容_爬虫实践--豆瓣电影当前上映电影信息爬取
  13. BIM+3DGIS的行业应用探讨
  14. Linux之进程管理——查看进程
  15. 05.前端面经汇总javaScript篇
  16. js的validate插件异步效验
  17. TP6框架全新开发社区系统源码开源
  18. 保密管理专业是学计算机的吗,计算机保密管理学习学习制度.docx
  19. 苹果微信验证失败,安卓成功_苹果将​​在微软失败的地方成功吗?
  20. C语言第五章实验原理,C语言第五章实验报告.docx

热门文章

  1. 如何比较浮点数相等_『GCTT 出品』Go 语言中的比较操作符
  2. Windows批处理脚本%1和%1%有区别吗?
  3. 有点意思!Linux 块设备处理模型,基础【簇、柱面、存储的计算】
  4. android mp3 lrc歌词文件utf-8歌词显示为乱码,Android读取本地json文件的方法(解决显示乱码问题)...
  5. 硬盘由于io设备错误无法运行此项请求_移动硬盘坏了真倒霉,祸不单行U盘也坏了,数据怎么存储才安全?...
  6. 起搏器可以用计算机吗,关于起搏器患者能否做核磁共振的最全说法
  7. 破解phpstorm2017.3.1版本并解决win10下修改hosts问题
  8. 【深度学习入门到精通系列】2D Unet3D Unet辨析
  9. 【系统分析与设计】业务流程图绘制方法
  10. python【力扣LeetCode算法题库】20- 有效的括号(辅助栈)