开发者社区> 问答> 正文

[@炯轩][¥20]Android单例内存泄露问题

在Android开发中使用单例时,时常遇到内存泄露问题,如何能够有效避免呢?

展开
收起
Nebula 2018-12-11 09:34:52 2044 0
7 条回答
写回答
取消 提交回答
  • 做好资源释放,如果是UI相关的重点考虑生命周期绑定。设计上要考虑使用单例是否合理。

    2019-07-17 23:19:45
    赞同 展开评论 打赏
  • 单例的生命周期是和APP生命周期相同的,所以只需要注意单例中的成员变量的引用链,是否持有了Activity生命周期的对象,比如activity的context,activity中的变量等。

    2019-07-17 23:19:45
    赞同 展开评论 打赏
  • 1、代码层面,单例调用的时候,检查是否有引用和间接引用activity等实例
    2、接入LeakCanary等检测框架,开发期间能早日发现问题

    2019-07-17 23:19:45
    赞同 展开评论 打赏
  • 1,不要为了调用简单而使用单例,跟App相同生命周期再用单例
    2,单例实例化注意同步
    3,有activity等非app Context引用,记得及时推出

    2019-07-17 23:19:45
    赞同 展开评论 打赏
  • 宇宙虽有其起源,却没有终结。无限。 星球虽也有起源,却因其自身之力走向毁灭。有限。

    1.预防为主:不是特别必要的场景少用单例,以及单例中少持有非必须的数据,要持有的地方即使释放,可以考虑通过代码review机制保障
    2.编译时检测:编写插件,基于规则去扫描单例相关的使用地方,进行一定的报警
    3.运行时检测:做一些从单例对象开始的可达性分析,结合对象的使用频率和存货时长,来做一定的报警

    2019-07-17 23:19:44
    赞同 展开评论 打赏
  • 可以对单例的对象,增加清理的接口,在程序退出的时候手动调用进行清理

    2019-07-17 23:19:44
    赞同 展开评论 打赏
  • 单例不要持有需要释放的对象,使用完就要释放掉,否则就会造成内存泄露。

    2019-07-17 23:19:44
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载