Android 内存管理目前按照我的工作来分,主要分为应用内存泄漏和native服务内存泄漏
应用内存泄漏:
方法1:开发单一应用最简单的方式,view hiarecher检测是否存在view的泄漏, ddms检测data object的量
方法2:procrank 观测 uss的使用情况
如下脚本,从网络获取:
#!/system/bin/sh while true do date >> /mnt/sdcard/procrank.log procrank >> /mnt/sdcard/procrank.log echo >> /mnt/sdcard/procrank.log sleep 5 done
将相关脚本放置于/system/bin,直接运行,然后操作,然后就可以看到内存情况,此方法适用于任何进程
应用的内存泄露,主要要注意以下的点
registerContentOberver 和 反注册,类似此类,这类内存泄露最不易查找,造成相互引用之类的
查询数据库的cursor关闭
bitmap
服务内存泄漏:
服务泄漏的判定主要用上述方法2来跟踪
另外
http://freepine.blogspot.com/2010/02/analyze-memory-leak-of-android-native.html
也是个好方法,可以直接搞到调用栈,另外不光适用于mediaserver,实际也可以移植依附到其他进程使用,本人已亲测过。MTK实际已将此方式集成于自己的系统中。