导出内存快照 .hprof文件
导出内存快照AndroidStudio初步分析 .hpfrof文件
在AndroidStudio初步分析:
1.切换查看模式为 Package Tree View模式,找到对应的activiy进行分析;
效果如下图: 这里MainActivity 退出一次又进入,本来应该只存在一个的,但是如果存在内存泄漏,导致无法正常回收,存在两个实例 ;
2.可以使用AndroidStudio 自带的分析小工具来检测有可能泄漏的对象
如下图: 检测到LoginActivity有可能泄漏
image.png image.png
使用MAT来进一步分析
经过上面步骤,发现有可疑的泄漏对象,使用MAT来进一步分析具体的泄漏原因
把AndroidStudio导入的内存快照转换一下为MAT的hprof模式
1.使用sdk/platform-tools/hprof-conv.exe 安卓SDK下面的hprof-conv命令来转换
adb 命令: hprof-conv -z 1.hprof 1_mat.hprof
2.或者直接使用AndroidStudio里面的工具直接导出hprof 文件,自动转换
image.png
3.使用MAT 打开转换后的 .hprof文件,然后搜索可疑的对象,然后选择
Merge Shortest Paths to GC Roots ,排除软,弱,虚引用
如上图,只显示强引用之后来分析泄漏的原因,查看被什么对象持有引用,导致不能正常回收;
这里就是MainActivity被系统的输入法InputMethodManager当中的mCurRootView持有,这个是系统的输入法内存泄漏,没有办法改变源代码,
解决: 使用反射来把mCurRootView设置为null
网友评论