内存泄漏(一)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 模式应用与内存泄漏

猜你喜欢

转载自blog.csdn.net/zhangjin1120/article/details/120941499