Android 内存泄露

Posted Ayinger

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 内存泄露相关的知识,希望对你有一定的参考价值。

一. 内存泄漏与内存溢出

内存溢出out of memory:指的是程序在申请时,没有足够的内存空间供其使用,出现oom,比如申请了一个integer,但给它存了long才能存下的数,就是内存溢出,内存溢出通俗讲就是内存不够用。

内存泄露memory leak:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后的果很严重,无论多少内存迟早会占光。

二. 内存泄露的原因

1) handler引起的内存泄露

解决:将handler声明成静态内部类,就不会持有外部类SecondActivity的引用,其生命周期就和外部类无关

         如果handler里面需要context的话,可以通过弱引用的方式引用外部类

2) 单例模式引起的内存泄露

解决:context是ApplicationContext,由于ApplicationContent的生命周期和APP一致,不会导致内存泄露

3) 内静态内部类创建静态实例引起内存泄露

解决:把内部类修改为静态内部类

4)非静态匿名内部类引起的内存泄露

解决:将匿名内部类设置为静态的

5)注册/反注册未成对使用引起的内存泄露

解决:注册广播接接收器,EventBus等,记得解绑

6)资源对象没有关闭引起的内存泄露

解决:那些资源不使用的时候,记得调用相应的类似close(),destory(),recycle(), release()等释放

7)集合对象没有及时清理引起的内存泄露

解决:通常会吧一些对象装入到集合中,当不使用的时候,一定要记得及时清理集合,让相关对象不再被引用

 

以上是关于Android 内存泄露的主要内容,如果未能解决你的问题,请参考以下文章

Android :安卓学习笔记之事件内存泄露 的简单理解

如何使用MAT分析Android应用内存泄露

Android--内存泄露分析

Android--内存泄露分析

Android--内存泄露分析

Android--内存泄露分析