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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangjin1120

可靠的文章费时费力,希望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值