关于disposable

Disposable类

dispose():主动解除订阅

isDisposed():查询是否解除订阅 true 代表 已经解除订阅

rxjava虽然好用,但是总所周知,容易遭层内存泄漏。也就说在订阅了事件后没有及时取阅,导致在activity或者fragment销毁后仍然占用着内存,无法释放。而disposable便是这个订阅事件,可以用来取消订阅。但是在什么时候取消订阅呢?我知道有两种方式:

使用CompositeDisposable

看源码,CompositeDisposable的介绍很简单

A disposable container that can hold onto multiple other disposables and offers O(1) add and removal complexity.

一个disposable的容器,可以容纳多个disposable,添加和去除的复杂度为O(1)。

这里需要注意的是在该类的addAll方法有这么一句注释

Atomically adds the given array of Disposables to the container or disposes them all if the container has been disposed

也就是说,如果这个CompositeDisposable容器已经是处于dispose的状态,那么所有加进来的disposable都会被自动切断。

所以说可以创建一个BaseActivity,用CompositeDisposable来管理订阅事件disposable,然后在acivity销毁的时候,调用compositeDisposable.dispose()就可以切断所有订阅事件,防止内存泄漏。

CompositeDisposable类

1、可以快速解除所有添加的Disposable类.

2、每当我们得到一个Disposable时就调用CompositeDisposable.add()将它添加到容器中, 在退出的时候, 调用CompositeDisposable.clear() 即可快速解除.

案例代码如下:

CompositeDisposable compositeDisposable=new CompositeDisposable();

Observable.create(new ObservableOnSubscribe() {

@Override

public void subscribe(ObservableEmitter emitter) throws Exception {

emitter.onNext(1);

emitter.onComplete();或者 emitter.onError(new Throwable("O__O "));

}

}).subscribe(new Observer() {

private Disposable mDisposable;

@Override

public void onSubscribe(Disposable d) {

mDisposable = d;

compositeDisposable.add(d);

}

@Override

public void onNext(Integer value) {

}

@Override

public void onError(Throwable e) {

}

@Override

public void onComplete() {

}

});

compositeDisposable.clear();

在oError和onComplete后调用disposable.dispose();,也就是上面我给的例子中的方法。

查看源码,ObservableCreate的静态类CreateEmitter就是这种方式实现的。同时也可以看到,onError和onComplete不可以同时调用的原因:每次掉用过onError或onComplete其中一个方法后,就会掉用dispose()方法,此时订阅取消,自然也就不能掉用另一个方法了

new Observer() {

private Disposable mDisposable;

private int i;

@Override

public void onSubscribe(Disposable d) {

Log.d(TAG, "subscribe");

mDisposable = d;

}

@Override

public void onNext(Integer value) {

Log.d(TAG, "onNext: " + value);

i++;

if (i == 2) {

Log.d(TAG, "dispose");

mDisposable.dispose();

Log.d(TAG, "isDisposed : " + mDisposable.isDisposed());

}

}

@Override

public void onError(Throwable e) {

Log.d(TAG, "error");

}

@Override

public void onComplete() {

Log.d(TAG, "complete");

}

}

java disposable_Rxjava关于Disposable你应该知道的事相关推荐

  1. Rxjava2关于Disposable你应该知道的事

    关于disposable Disposable类 dispose():主动解除订阅 isDisposed():查询是否解除订阅 true 代表 已经解除订阅 rxjava虽然好用,但是总所周知,容易造 ...

  2. APP推广前,你应该知道的事

    前言:随着中国互联网渗透率的逐步提高,中国广告主的广告投放重心逐渐向互联网迁移.互联网广告投放占比上升趋势明显.调查表明,随着用户逐步向移动端迁徙,广告主也正快速接受甚至追捧移动广告,广告主在移动端的 ...

  3. 比尔·盖茨:关于新冠疫苗你需要知道的事

    这些天我被问得最多的一个问题是:世界何时才能回到去年12月新冠病毒大流行之前的状态?我的答案始终如一:当我们得到一种近乎完美的特效药的时候,或者当地球上几乎所有人都接种了新冠疫苗的时候. 前者不太可能 ...

  4. 产品经理面试必须知道的事

    最近"产品经理面试太难了吧!"这句话一直在我耳边缠绕.其实我觉得还好吧,我只会觉得你可能是没技巧.下面金老师给大家分享一下字节跳动产品经理招聘的面试干货. 应该没有人不知道字节跳动 ...

  5. 大数据软件的真假分辨,消费者一定要知道的事!

    大数据软件的真假分辨,消费者一定要知道的事! 大数据时代,各种各样的新东西出现,让大家的生活都变的更便利,快捷了.但是一个新的好东西的出现,势必会引来大量的不良商家开始争相模仿.恶意竞争,打乱了市场动 ...

  6. “真希望我第一次创业时就知道的事”

    我们常常事后诸葛亮.当你回头看看之前做过的项目或努力,你总能更好地意识到什么事重要.什么事不重要. 在创业上也是一样的.在一项事业上奋斗了一两年或更多的时间后,你总能更好地意识到一些事是值得担心的,而 ...

  7. eBay跨境电商建议指南:eBay开店之前你就该知道的事

    做eBay跨境电商的卖家千千万万,到底要怎么做才能在这个平台大卖呢?这是东哥最近私信很多人都在问的一个问题,东哥作为eBay老鸟,不得不说在这个问题上真的有很多建议想跟新手卖家们提一提.所以今天东哥的 ...

  8. 串口,com口,ttl,max232你应该知道的事

    1 今天,说几个比较基础的知识,大家在开发过程中经常会遇到但是又不是特别注意的知识点. TTL电平: TTL是Transistor-Transistor Logic,即晶体管-晶体管逻辑的简称,它是计 ...

  9. 入门深度学习?这里有5件你应该知道的事

    作者|PURVA HUILGOL 编译|Flin 来源|analyticsvidhya 开始你的深度学习生涯? 对于新手来说,深度学习是一个复杂而令人生畏的领域.像隐藏层.卷积神经网络.反向传播等概念 ...

最新文章

  1. 提升码农90%学习效率的10大学习工具
  2. 分布式概念-如何访问到分布式系统中的服务
  3. 不愧是大佬用Python做一个游戏辅助脚本,完整编程思路分享!
  4. synchronized关键字以及实例锁 类锁
  5. 关闭子页面刷新父页面,不需要弹出确认窗口
  6. 在CentOS下安装配置MySQL(转)
  7. python websocket爬虫_详解python websocket获取实时数据的几种常见链接方式
  8. ASP.NET MEMBERSHIP的XML配置
  9. node.js windows下安装与配置
  10. Linux文件系统及属性
  11. 洛谷 深基 第1部分 语言入门 第4章 循环结构程序设计(2022.02.14)
  12. c语言爬虫和python爬虫_为什么写爬虫都喜欢用python?
  13. 《jQuery EasyUI开发指南》——导读
  14. 失物招领小程序_在机场丢了东西怎么办?温州机场失物招领在线办理平台暖心上线!...
  15. jQuery对象复制
  16. 鸿蒙系统sp3什么意思,XP系统的那个SP3是什么意思?
  17. 《谁的青春不迷茫》作者:刘同摘录
  18. 专科出来的计算机学生,月薪两万是否不切实际?
  19. BUUCTF 2021-10-4 Pwn
  20. sudo -l和sudo -v说明(suse linux sudo)

热门文章

  1. Mule通过HTTP连接并传参给webService
  2. CF 208E Blood Cousins (dus on tree)
  3. Linux系统启动修复
  4. ALSA音频架构 -- snd_pcm_open函数分析
  5. LyScript 实现Hook隐藏调试器
  6. Apache Sentry详细讲解
  7. JAVA游戏资讯网站计算机毕业设计Mybatis+系统+数据库+调试部署
  8. dubbox的基本使用
  9. 操作系统实验--spooling技术
  10. 印象笔记的功能有哪些