简介
不知道大家有没有碰到这个问题,在一个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){ mView=view; } public void unSubscription(){ mCompositeDisposable.clear(); } }
重写BaseActivity的onDestroy方法
@Override protected void onDestroy() { super.onDestroy(); presenter.unSubscription();//在activity销毁的时候,取消当前Activity的所有订阅 }
这样在Activity销毁的时候,会执行取消订阅的方法