Mvp模式如何管理生命周期

Mvp模式在封装的时候会造成内存泄漏,因为presenter层,需要做网络请求,所以就需要考虑到网络请求的取消操作,如果不处理,activity销毁了,presenter层还在请求网络,就会造成内存泄漏。
如何解决Mvp模式造成的内存泄漏?
只要presenter层能感知activity生命周期的变化,在activity销毁的时候,取消网络请求,就能解决这个问题。
下面开始封装activity和presenter。

定义IPresenter 声明activity(Fragment)生命周期中的各个回调方法

  void init(BaseActivity activity, U ui);

    /**
     * onUICreate:UI被创建的时候应该invoke这个method. 
*

* 比如Activity的onCreate()、Fragment的onCreateView()的方法应该调用Presenter的这个方法 * * @param savedInstanceState 保存了的状态 */ void onUICreate(Bundle savedInstanceState); /** * onUIStart:在UI被创建和被显示到屏幕之间应该回调这个方法.
*

* 比如Activity的onStart()方法应该调用Presenter的这个方法 */ void onUIStart(); /** * onUIResume:在UI被显示到屏幕的时候应该回调这个方法.
*

* 比如Activity的onResume()方法应该调用Presenter的这个方法 */ void onUIResume(); /** * onUIPause:在UI从屏幕上消失的时候应该回调这个方法.
*

* 比如Activity的onPause()方法应该调用Presenter的这个方法 */ void onUIPause(); /** * onUIStop:在UI从屏幕完全隐藏应该回调这个方法.
*

* 比如Activity的onStop()方法应该调用Presenter的这个方法 */ void onUIStop(); /** * onUIDestroy:当UI被Destory的时候应该回调这个方法.
*/ void onUIDestroy(); /** * onSaveInstanceState:保存数据.
*

* 一般是因为内存不足UI的状态被回收的时候调用 * * @param outState 待保存的状态 */ void onSaveInstanceState(Bundle outState); /** * onRestoreInstanceState:当UI被恢复的时候被调用.
* * @param savedInstanceState 保存了的状态 */ void onRestoreInstanceState(Bundle savedInstanceState);

封装BaseActivity
拥有一个 protected P mPresenter实例,类型写成泛型,protected修饰,子类实现
构造方法中,对mPresenter进行实例化:采用反射的形式(避免让子类进行实例化,繁琐)

public abstract class BaseMVPActivity

extends BaseActivity { protected P mPresenter; public BaseMVPActivity(){ this.mPresenter = createPresenter(); } protected P createPresenter(){ ParameterizedType type = (ParameterizedType)(getClass().getGenericSuperclass()); if(type == null){ return null; } Type[] typeArray = type.getActualTypeArguments(); if(typeArray.length == 0){ return null; } Class

clazz = (Class

) typeArray[0]; try { return clazz.newInstance(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } return null; } @Override protected void onDestroy() { mPresenter.onUIDestroy(); super.onDestroy(); }

封装BasePresenter
3.定义BasePresenter,页面销毁的回调里面。处理网络请求
定义一个集合,把每次网络请求装载到集合里面,在页面销毁的时候,取消所有的网络请求。防止内存泄漏。

public abstract class BasePresenter implements IPresenter {

 @Override
    public void onUIDestroy() {
        // 清空Call列表,并放弃Call请求
        clearAndCancelCallList();

    }
}

你可能感兴趣的:(Mvp模式如何管理生命周期)