作用
基于Rx的Presenter的封装,控制订阅的生命周期,unsubscribe()这个方法重要,因为在subscribe()之后Observable会持有Subscriber 的引用,这个引用如果不能及时释放,将有内存泄漏的风险.
要点
- RxPresenter泛型传入View层的接口并继承BaseContract.BaseView接口
- 实现BaseContract.BasePresenter并泛型传入View
- 这里面主要实现订阅,取消订阅,
源码如下
package com.daqsoft.baseproject.base;
import rx.Subscription;
import rx.subscriptions.CompositeSubscription;
/**
* Created by yanbo on 2017/5/26.
* 基于Rx的Presenter封装,控制订阅的生命周期
* unsubscribe() 这个方法很重要,
* 因为在 subscribe() 之后, Observable 会持有 Subscriber 的引用,
* 这个引用如果不能及时被释放,将有内存泄露的风险。
*/
public class RxPresenter <T extends BaseContract.BaseView> implements BaseContract.BasePresenter<T>{
protected T mView;
protected CompositeSubscription mCompositeSubscription;
protected void unSubscribe() {
if (mCompositeSubscription != null) {
mCompositeSubscription.unsubscribe();
}
}
protected void addSubscrebe(Subscription subscription) {
if (mCompositeSubscription == null) {
mCompositeSubscription = new CompositeSubscription();
}
mCompositeSubscription.add(subscription);
}
@Override
public void attachView(T view) {
this.mView = view;
}
@Override
public void detachView() {
this.mView = null;
unSubscribe();
}
}