Android内存泄漏基本可以分为以下四大类:
1、集合类泄漏
2、单例/静态变量造成的内存泄漏
3、匿名内部类/非静态内部类
4、资源未关闭造成的内存泄漏
今天举例一个集合类泄漏
集合类添加元素后,仍引用着集合元素对象,导致该集合中的元素对象无法被回收,从而导致内存泄露。
dump下堆转储文件
image
image.png
fragments->model包下,可以看到TimeLine有5个实例,占用内存。选中TimeLine这个集合数组,点击Instance View窗口:
可以看到这个实例在哪里被引用-->OperationTaobaoImp这个类持有它。
image
来看一下这个类里:
image.png
清空数组,timeLines.clear(),再dump一下看到已经没有了。
fragments下已经看不到model这个包了,因为TimeLine的实例不在了。
image.png