之前写过一个类似的框架搭建,但是遗留下了一个问题就是,Rxjava中的订阅何如与项目中的Activity和Fragment如何绑定生命周期,避免内存泄漏以及抛出一些异常问题,这里使用了RxLifecycle。不多说,上代码。(该例子中使用的Rxjava,RxLifecycle都是2.0以下的,2.0上手难度有点高,况且我1.0还不懂)。
一、Presenter基类:
public abstract class BasePresenter<V> implements Presenter<V> {
protected WeakReference<V> weakReference;
@Override
public void attachView(V view) {
this.weakReference = new WeakReference<V>(view);
}
protected V getView(){
return weakReference.get();
}
@Override
public void detachView() {
if (weakReference != null){
weakReference.clear();
weakReference = null;
}
}
}
这里还有Presenter基类里面的两个接口,用于绑定以及解绑view
public interface Presenter<V> {
void attachView(V view);
void detachView();
}
二、Activity基类,基类继承RxLifeCycle中的RxAppCompatActivity,用于生命周期的绑定:
public abstract class BaseActivity<V,P extends BasePresenter<V>> extends RxAppCompatActivity{
public Activity mActivity;
public P mPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = this;
mPresenter = createPresenter();
}
@Override
protected void onResume() {
super.onResume();
mPresenter.attachView((V)this);
}
protected abstract P createPresenter();
@Override
protected void onDestroy() {
if (mPresenter != null){
mPresenter.detachView();
}
super.onDestroy();
}
}
三、Fragment基类,同理:
public abstract class BaseFragment<V,P extends BasePresenter<V>> extends RxFragment {
public Activity mActivity;
public P mPresenter;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.mActivity = activity;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mPresenter = createPresent();
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public