关于Rxjava+Retrofit网络请求防止内存泄露

匿名 (未验证) 提交于 2019-12-02 21:53:52
简介

不知道大家有没有碰到这个问题,在一个Activcity正在加载数据,网络请求还未完毕,此时用户将Activity关闭了,这时候就造成了内存泄露(为啥泄露自己想),Activity并没有被释放的,这时候网络请求完了,回调了请求成功方法,填充view就开始报null异常了...,不知道大家有没有遇到这个问题?在以前网络请求发起是很难取消掉的,我们是在onSuccess回调加了判断Activity是否被销毁掉,在进行填充view

原理

我们有了Rxjava,流水线,既然事件可以订阅,也可以取消订阅,我们只需要在Activity被销毁的时候,将这个页面的所有的订阅全部取消掉

主要使用的几个类
  1. CompositeDisposable(个人理解:一个管理订约)
  2. 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销毁的时候,会执行取消订阅的方法

git地址

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!