内存泄漏的场景及解决办法

内存泄漏场景,以及开发过程如何避免内存泄漏。

判断

A引用B,A的生命周期长于B。

Handler导致内存泄漏:Handler消息还没有发送完毕,Activity被销毁了,此时Activity无法被即时回收。
解决方法:Activity的onDestory()移除所有消息handler.removeCallbacksAndMessagers(null)

线程导致内存泄漏:子线程在耗时操作,内部类持有外部类隐士引用。当Activity被销毁了,子线程还在执行,Activity无法被回收。
解决办法:使用静态内部类,再使用弱引用保存Context。

单例导致泄漏:单例对象引用Activity上下文,单例的生命周期比它长。
解决办法:上下文如果是Application,将和单例生命周期相同,不存在内存泄漏。

静态集合导致泄漏:静态集合添加的对象,添加之后该集合一直引用该对象,无法释放。
解决方法,使用完该集合,清空集合

Stream未关闭导致内存泄漏:JVM无法通过垃圾回收来释放这些资源。
解决办法:使用完流即时关闭流。

其他原因导致内存泄漏:Service为解除绑定,broadcastReceiver未解除注册,EventBus未解除绑定

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容