内存泄漏MVP模式中的内存泄漏以及解决方案

Posted zhangjin1120

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存泄漏MVP模式中的内存泄漏以及解决方案相关的知识,希望对你有一定的参考价值。

  • MVP模式为什么会存在内存泄漏的隐患?

     当用户按返回键时,页面Activity退出,如果Model在子线程上执行耗时任务,还没有结束,Model持有Presenter的引用,Presenter持有Activity的引用。那么这个Activity对象就没有办法被回收。

  • 怎么解决这个内存泄漏?

     在Activity的onDestroy方法中,通过Presenter间接将Model中的耗时任务取消,然后将Presenter和Model置空。

  • 既然这样可以解决内存泄漏,为什么还要用弱引用(也有代码中用软引用)?

      因为onDestroy方法不一定立即执行,有可能主线程有大量的任务要处理,来不及执行onDestroy()方法。在此期间,如果GC触发,Activity对象还是无法被回收。而通过弱引用,将Activity对象转换为弱可达对象,GC一旦运行,不管内存是否充足,都会回收弱可达对象。从而解决内存泄漏。
      关于onDestroy()没有立刻执行,详细的原因参考:深入分析Android中Activity的onStop和onDestroy()回调延时及延时10s的问题。关于弱可达,网上许多解释都是不准确的,建议参考:(一)Java 中的引用类型、对象的可达性以及回收处理

    56赞:Android 开发:浅谈 MVP 模式应用与内存泄漏

以上是关于内存泄漏MVP模式中的内存泄漏以及解决方案的主要内容,如果未能解决你的问题,请参考以下文章

MVP内存泄漏全解(笔记)

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

如何解决内存泄漏问题?

常见的 Perl 内存/引用泄漏模式?

内存泄漏定位以及解决

Android面试复习总纲