Android内存泄露的几个点

1.内部类造成的内存泄露。

Activity对象是存在堆内存中的,而内部类静态实例是存放在方法区中,GC机制是回收

堆内存,所以,如回收不了被内部类静态实例持有的堆内存。

内部类在编译时,会生成与外部类的持有资源,这样就内部类就持有外部类。

可通过静态内部类解决上面的问题,静态内部类不持有外部类的资源,这也就是为什么静态内部类不能调用外部类的资源。

2.单例造成的内存泄露

如果单例持有的context,是activity的context,而单例是静态的,所以他的生命周期是跟application同样的,所以持有activity

的context,或其他资源,会让activity无法被回收。

3.Handler造成的内存泄露

当MainActivity结束时,未处理的消息持有handler的引用,而handler又持有它所属的外部类也就是 MainActivity的引用。这条引用关系会一直保持直

到消息得到处理,这样阻止了MainActivity被垃圾回收器回收,从而造成了内存泄漏。

解决方法,可将handler修改成静态内部类,并加上弱引用

4.资源未关闭造成的内存泄漏

对于使用了BraodcastReceiver,ContentObserver,File,Cursor,Stream,Bitmap等资源,应该在Activity销毁时及时关闭或者注销,否则这些资源将不会被回收,从而造成内存泄漏。

5.线程造成的内存泄漏

AsyncTask和Runnable都使用了匿名内部类,那么它们将持有其所在Activity的隐式引用。如果任务在Activity销毁之前还未完成,那么将导致Activity的内存资源无法被回收,从而造成内存泄漏。

可修改成静态内部类。


6.一些框架资源的使用习惯,没有及时回收,应该在周期内进行释放

7.集合类泄漏,集合如果只有添加机制,没有删除的处理,极其容易造成内存泄露

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

相关阅读更多精彩内容

  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    _痞子阅读 5,555评论 0 8
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    宇宙只有巴掌大阅读 7,020评论 0 12
  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    apkcore阅读 4,993评论 2 7
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    DreamFish阅读 4,206评论 0 5
  • 小扇轻盈透薰笼,流光两处氲梦中。 回首白头阶前座,青衣恹恹烛泪红。 烟催寒香羌愁眠,楼斜疏影鸟倦容。 谁怜梨花陌上...
    天与聘婷阅读 3,868评论 2 16

友情链接更多精彩内容