简介
不知道大家有没有碰到这个问题,在一个Activcity正在加载数据,网络请求还未完毕,此时用户将Activity关闭了,这时候就造成了内存泄露(为啥泄露自己想),Activity并没有被释放的,这时候网络请求完了,回调了请求成功方法,填充view就开始报null异常了...,不知道大家有没有遇到这个问题?在以前网络请求发起是很难取消掉的,我们是在onSuccess回调加了判断Activity是否被销毁掉,在进行填充view
原理
我们有了Rxjava,流水线,既然事件可以订阅,也可以取消订阅,我们只需要在Activity被销毁的时候,将这个页面的所有的订阅全部取消掉
主要使用的几个类
- CompositeDisposable(个人理解:一个管理订约)
- DisposableObserver就是一个Observer,他实现了Disposable接口
实战
所有的网络请求都使用BaseObserver
public abstract class BaseObserver<T> extends DisposableObserver<T> {
public BaseObserver(CompositeDisposable compositeDisposable) {
compositeDisposable.add(this);
}
}
在BasePresenter
public abstract class BaseMvpPresenter<V> {
public CompositeDisposable mCompositeDisposable = new CompositeDisposable();
public V mView;
public void setView(V view){