我司的测试部门在平常的自动化测试中,发现了一些内存泄漏的点。其中许多泄漏的缘由一眼就能看出,但是也有一些真的发现不了。如图android
步骤1:首先打开Android Studio,点击顶部Toolbar 的Profile按钮bash
指示1.用于强制执行垃圾回收 Event 的按钮。(相似人工执行gc)网络
指示2.用于捕获堆转储的按钮(堆转储显示在您捕获堆转储时您的应用中哪些对象正在使用内存)这个也是本次重点要用的按钮session
指示3.用于记录内存分配状况的按钮。 此按钮仅在链接至运行 Android 7.1 或更低版本的设备时才会显示。eclipse
指示4.用于放大/缩小时间线的按钮。工具
指示5.用于跳转至实时内存数据的按钮。测试
指示6.Event 时间线,其显示 Activity 状态、用户输入 Event 和屏幕旋转 Event。spa
指示7.内存使用量时间线插件
步骤4:根据内存泄漏的状况,执行对应的操做。正常状况操做完成之后,相应对象的GC Root链已经没有了。 步骤5:点击按钮2,捕获堆转储。而后右键点击对应存储的对象,导出相应HPROF格式文件。如图所示 3d
若是须要除Android Studio的其它HPROF分析器查看文件(我选择的是Memory Analyzer(MAT),下载地址为:www.eclipse.org/mat/), 首先须要将 HPROF 文件从 Android 格式转换为 Java SE HPROF 格式。 您 可使用 android_sdk/platform-tools/ 目录中提供的 hprof-conv 工具执行此操做。 运行包括如下两个参数的 hprof-conv 命令:heap-original.hprof(原始 HPROF 文件)和heap-converted.hprof(转换后 HPROF 文件)。 例如:
hprof-conv heap-original.hprof heap-converted.hprof
复制代码
步骤6:转换完格式之后在mat应用中打开对应的文件,同时选择Histogram按钮。
搜索你想查看的类,而后在对应的类中右击,选择Merge shortest Paths to Gc roots 再选择 exclude phantom/weak refrecnce 可看到如图所示的调用链,有了这个解决问题就轻松了。
自此,大概的一次Android内存泄漏分析流程结束,写下这个也是为了以后再分析可用。