内存泄漏 简述

内存泄漏

Q什么是内存泄漏?

内存泄漏memory leak,指原本应该被gc回收的对象还被另一个正在使用的对象引用持有。

Q什么情况下导致内存泄漏?

1.static关键字使用问题

当使用static修饰Context,Activity关闭时不能被回收,因为static修饰的Context生命周期比Activity长。

2.Handler泄漏问题

当使用非静态内部类创建handler时,Activity关闭后handler还在处理消息,将会导致内存泄漏。因为Handler持有Activity的引用。

正确的写法是

创建一个静态Handler内部类,然后对Handler持有的对象使用弱引用,在onDestory移除消息队列中的消息removeCallbacks()

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

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

Q如何避免内存泄漏?

不要让生命周期长于Activity的对象持有到Activity的引用

尽量使用Application的Context而不是Activity的Context

尽量不要在Activity中使用非静态内部类,因为非静态内部类会隐式持有外部类实例的引用

静态内部类中使用弱引用来引用外部类的成员变量

参考

http://blog.csdn.net/adreamer_bj/article/details/52099278

http://blog.csdn.net/u010687392/article/details/49909477

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容