0
点赞
收藏
分享

微信扫一扫

Android 内存泄露

Separes 2021-09-29 阅读 61
Android

程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

长生命周期持有短生命周期对象引用,尽管短生命周期对象已经没有使用,但长生命周期一直持有短生命周期引用而导致不能回收,则导致内存泄露。

背包没有容量且很重,玩具熊对儿子来说,可能都不会拿出来占用空间,最后导致内存泄露。但儿子很聪明对玩具标记了颜色,发现不能装,取出带有绿色玩具熊(软引用 SoftReference内存不够都被回收),检查背包黄色标签标示(弱引用WeakReference 扫描管辖内存时)

常见内存溢出:

  • 单例模式,单例往往生命周期都是整个应用生命周期,如果持有短生命周期容易出现内存泄漏,如Activity

  • 静态变量,和application一样生命周期,需要我们评估占据空间大小

  • handler持有短生命周期,特别是匿名内部内,messagequeue持有,looper持有前者

  • 匿名内部类持有外部类对象,如activity里面的内部类,如果匿名内部类做耗时是,无法释放外部对象

  • 资源泄漏,数据库没有关闭,文件没有关闭,bitmap没有释放

  • 最好是实现onDestory,把需要解绑注册的广播解绑

  • 第三库传递一定是applicant的context

  • 容器你装了fragment或者view,activity持有容器对象,最好在activity销毁是clear,不要等待垃圾回收器。

使用leakcanary+MAT工具检查内存

开发时一定注意在activity被fragment释放资源

举报

相关推荐

0 条评论