RxJava2学习之Disposable对象
[TOC]
概述
Disposable类
- dispose():主动解除订阅
- isDisposed():查询是否解除订阅 true 代表 已经解除订阅
rxjava虽然好用,但是总所周知,容易遭层内存泄漏。也就说在订阅了事件后没有及时取阅,导致在activity或者fragment销毁后仍然占用着内存,无法释放。而disposable便是这个订阅事件,可以用来取消订阅。但是在什么时候取消订阅呢?我知道有两种方式:
使用CompositeDisposable
看源码,CompositeDisposable的介绍很简单
1 | A disposable container that can hold onto multiple other disposables and offers O(1) add and removal complexity. |
一个disposable的容器,可以容纳多个disposable,添加和去除的复杂度为O(1)。
也就是说,如果这个CompositeDisposable容器已经是处于dispose的状态,那么所有加进来的disposable都会被自动切断。
所以说可以创建一个BaseActivity,用CompositeDisposable来管理订阅事件disposable,然后在acivity销毁的时候,调用compositeDisposable.dispose()就可以切断所有订阅事件,防止内存泄漏。
CompositeDisposable类
1、可以快速解除所有添加的Disposable类.
2、每当我们得到一个Disposable时就调用CompositeDisposable.add()将它添加到容器中, 在退出的时候, 调用CompositeDisposable.clear() 即可快速解除.
案例代码如下:
1 | CompositeDisposable compositeDisposable=new CompositeDisposable(); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 麦溪·在路上!
评论
ValineDisqus