美文网首页
Mvp模式如何管理生命周期

Mvp模式如何管理生命周期

作者: 陈科比大宝贝儿 | 来源:发表于2020-12-17 14:13 被阅读0次

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

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

 <U extends IUI> void init(BaseActivity activity, U ui);

    /**
     * onUICreate:UI被创建的时候应该invoke这个method. <br/>
     * <p/>
     * 比如Activity的onCreate()、Fragment的onCreateView()的方法应该调用Presenter的这个方法
     *
     * @param savedInstanceState 保存了的状态
     */
    void onUICreate(Bundle savedInstanceState);

    /**
     * onUIStart:在UI被创建和被显示到屏幕之间应该回调这个方法. <br/>
     * <p/>
     * 比如Activity的onStart()方法应该调用Presenter的这个方法
     */
    void onUIStart();

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

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

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

    /**
     * onUIDestroy:当UI被Destory的时候应该回调这个方法. <br/>
     */
    void onUIDestroy();

    /**
     * onSaveInstanceState:保存数据. <br/>
     * <p/>
     * 一般是因为内存不足UI的状态被回收的时候调用
     *
     * @param outState 待保存的状态
     */
    void onSaveInstanceState(Bundle outState);

    /**
     * onRestoreInstanceState:当UI被恢复的时候被调用. <br/>
     *
     * @param savedInstanceState 保存了的状态
     */
    void onRestoreInstanceState(Bundle savedInstanceState);

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

public abstract class BaseMVPActivity<P extends IPresenter> 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<P> clazz = (Class<P>) 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<U extends IUI> implements IPresenter {

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

    }
}

相关文章

  • Mvp模式如何管理生命周期

    Mvp模式在封装的时候会造成内存泄漏,因为presenter层,需要做网络请求,所以就需要考虑到网络请求的取消操作...

  • 2018.03.21 头条Android内推一二三面

    一面(视频面试 60min) Activity生命周期与启动模式(透明Activity情况) MVC、MVP、MV...

  • Android 架构演进:从 MVC 到 MVP、MVVM、MV

    为了优化代码设计,业界先后提出了 MVC、MVP、MVVM 和 MVI 等架构设计。这四个模式讨论的是 “如何管理...

  • Kotlin Android MVP设计模式及基类的实现

    前言 之前写过一篇文章说的是如何用java实现mvp模式Android MVP模式 简单入门实践现在不是用的Kot...

  • MVP简单尝试

    MVP模式解析 标签: Android 架构 MVP MVP模式的核心思想 MVP将Activity中的U...

  • MVP篇三,MVP模式在Android上的应用

    1、MVP模式的基本介绍 参见: MVP模式1,MVP模式的原理 http://www.jianshu.com/p...

  • iOS面试题

    设计一个图片缓存 单例模式 kvo 工厂模式 生命周期 oc的内存管理机制 如何保证数据安全性 多线程并发 使用过...

  • Android-MVP模式

    MVP模式的作用 分离了视图逻辑和业务逻辑,降低了耦合 Activity只处理生命周期的任务,代码变得更加简洁 视...

  • Mvvm开发模式解读

    MVVM 模式与Mvp: Mvvm将Mvp的Presenter 改名为 ViewModel,基本上与 MVP 模式...

  • Android MVP模式

    前言 1. MVP模式 MVP:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,...

网友评论

      本文标题:Mvp模式如何管理生命周期

      本文链接:https://www.haomeiwen.com/subject/ghlzgktx.html