Android 内存泄漏原因总结
-
单例模式持有 Context 对象:由于单例的静态特性使得单例的生命周期和应用的生命周期一样长,如果一个对象已经不需要使用了,而单例对象还持有该对象的引用,那么这个对象将不能被正常回收,这就导致了内存泄漏。
-
非静态内部类创建的静态成员变量持有 Context 对象:因为非静态内部类默认会持有外部类的引用,而它作为外部类的静态成员变量时,会永远持有外部类对象,与整个应用生命周期一样长。典型的就是 Activity 的内部类持有了当前 Activity 的实例,而这个类有一个静态成员变量的声明,这种情况需要在
onDestroy
方法中清空静态成员变量为null
。 -
非静态内部类默认持有外部类的引用:包括匿名内部类,当非静态内部类对象的生命周期比外部类对象的生命周期长时,就会导致内存泄漏,如
Handler
、Thread
、AsyncTask
等,应该使用静态Handler
类+弱引用weakReference
持有外部类对象 -
Handler 造成的内存泄漏:生命周期长度不一样,匿名内部类会持有外部类的引用,
Activity
页面关闭了,Handler
中的消息队列还有消息在跑,应该使用WeakReference
原文地址:https://blog.csdn.net/lyabc123456/article/details/134612109
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_17981.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。