Android可能发生内存泄露的地方总结:
1.查询数据库没有关闭游标
2.构建adapter时,没有使用缓存的convertView
3.Bitmap对象不使用的时候调用recycle()方法释放内存
4.释放对象的引用
5.单例模式引用context,如果使用actvitiy-context,会造成内存泄露,
可以使用getApplicationContext()); 或getApplication()代替。
参考文档:
Android 内存泄漏调试
http://wenku.baidu.com/view/3dbfb0a1b0717fd5360cdc47.html
分析内存泄露的办法:
1.使用MAT分析内存泄露
2.使用procrank记录内存走势
使用procrank来跟踪某进程的使用哪个情况我们常常借助与脚本。这样就可以查看某一段时间的内存变化。
如创建一个文件:trackmem.sh chmod 775 trackmem.sh
内容如下:
#!/bin/bash
while true; do
adb shell procrank | grep "com.example.studymemroyleak"
sleep 1
done
运行该脚本:
./trackmem.sh
这个脚本的用途是每1秒钟让系统输出一次指定进程的内存使用状况,主要观察Uss的数据,可以直接把数据输出到xls表格
./trackmem.sh > data.xls
然后生成折线图(选择只绘制线条),注意去掉数字的单位(K)。生成图表时,先选择数据,然后再点插入图表即可。