Android View内存泄漏定位

一.初步判断是否存在内存泄漏

查看view 是否泄漏
dumpsys meminfo packagename
1.查看view的个数 :
操作后关闭界面观察View的个数是否由减少,多次操作后view的个数死否持续增长


111.png
二.定位内存泄漏
1.使用Android Studio 定位内存泄漏

a)收集内存泄漏信息
对有内存泄漏的页面进行反复操作(为了模拟泄漏场景)。点击垃圾桶的图标gc,再点击Dump java heap 按钮获取堆栈信息


222.png

b.定位内存泄漏位置
1).通过ArrangeByPackage 选中要调试的包名
2)通过Allocations 查看当前对象在内存中存在的实例个数
3)双击可疑的内存泄漏对象,右边Reference 会显示引用关系
如果存在内存泄漏的是被同一个对象被引用导致的 Reference 最终会指向同一个对象


3333.png

也可以通过Export Heap Dump 可以导出 hprof 文件(使用mat查看)
mat查看的好处:通过过滤引用关系,直接找到被内存泄漏的位置
4444.png
2.使用Mat定位内存泄漏

使用 am dumpheap packagename /sdcard/xx.hprof 抓取 app hprof 文件
hprof 文件通过 Android\Sdk\platform-tools 转成 mat 可解析文件
命令: hprof-conv dump.hprof converted-dump.hprof
一.点击Histogram

5555.png

二:搜索可疑对象
8888.png

三:查看引用关系,通过 exclude all phantom/weak/soft etc 排除可疑引用关系
777.png

四:内存泄漏位置
111111.png

你可能感兴趣的:(Android View内存泄漏定位)