Android中MVP模式的内存泄漏解决及Retrofit2、RxJava中断网络请求(二)
2017-12-23 23:47
363 查看
建立在上篇文章基础之上,我们只需要增加一个类似碎片的attach和detach就可以了。再增加一个interrupt来中断网络请求。
看看我们改造后的P
构造方法不一样了。我们不采用构造器赋值的形式了,而是通过attach方法(就好比是set方法)
最下面多出了3个方法。attach,detach,最后还多了一个中断网络请求的操作。
我们可以进M看一下
我们直接取消订阅就可以了(如果纯Retrofit,call.cancel()就可以了)
最后看看V层的onCreate和onDestory
github地址:https://github.com/xubinhong/MVP2
看看我们改造后的P
public class RequestPresenter { private RequestView mRequestView; private RequestModel mRequestModel; public RequestPresenter() { this.mRequestModel = new RequestModel(); } public void clickRequest(String userName, String userPassword) { if (mRequestView != null) { mRequestView.requestLoading(); mRequestModel.loginRequest(userName, userPassword, new Subscriber<JSONObject>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { mRequestView.resultFailure(e.getMessage()); mRequestView.resultFinish(); } @Override public void onNext(JSONObject object) { mRequestView.resultSuccess(object); mRequestView.resultFinish(); } }); } } public void attach(RequestView view) { this.mRequestView = view; } public void detach() { mRequestView = null; } public void interruptHttp() { mRequestModel.interruptRequest(); } }
构造方法不一样了。我们不采用构造器赋值的形式了,而是通过attach方法(就好比是set方法)
最下面多出了3个方法。attach,detach,最后还多了一个中断网络请求的操作。
我们可以进M看一下
public class RequestModel { private static final String BASE_URL = "http://10.19.71.204:8080/"; private Subscription subscription; void loginRequest(String userName, String userPassword, Subscriber<JSONObject> subscriber) { subscription = (new RetrofitUtils()) .getRetrofit(BASE_URL) .create(LoginAPI.class) .login(userName, userPassword) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); } void interruptRequest() { subscription.unsubscribe(); subscription = null; } }
我们直接取消订阅就可以了(如果纯Retrofit,call.cancel()就可以了)
最后看看V层的onCreate和onDestory
@Override protected void onDestroy() { super.onDestroy(); presenter.interruptHttp(); presenter.detach(); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); presenter = new RequestPresenter(); presenter.attach(this); }
github地址:https://github.com/xubinhong/MVP2
相关文章推荐
- Android三大设计模式之一------------------MVP设计模式(包括rxjava+retrofit网络请求框架)
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- Android 单例模式封装 RxJava+Retrofit 网络请求
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- 使用MVP+Retrofit+RxJava实现的的Android Demo (下)使用Retrofit+RxJava处理网络请求
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- 使用retrofit框架的网络请求方法使用例子,同时+MVP +rxjava + rxandroid使用
- 使用retrofit框架的网络请求方法使用例子,同时+MVP +rxjava + rxandroid使用
- Android 框架设计Demo,一个简单的MVP示例搜索功能,网络请求用Retrofit+RxJava实现
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- Android 单例模式 封装 Okhttp + RxJava 网络请求(get和post)
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- [置顶] Android 一步步搭建MVP+Retrofit+RxJava网络请求框架
- Android项目MVP模式框架+okhttp+rxjava+retrofit网络框架
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架