美文网首页
安卓内存泄露工具使用

安卓内存泄露工具使用

作者: smilEdit | 来源:发表于2019-03-31 21:02 被阅读0次

    关于是什么内存泄露,为什么会内存泄露,这里就先不提了,下面只说对于内存泄露我们可以用什么工具来检测。

    使用开源工具

    安卓开发应该都非常熟悉了, LeakCanary。
    开源地址:
    https://github.com/square/leakcanary/
    集成到自己的项目中,直接在 UI 中就能够查看了,非常的简单明了,不做赘述。

    使用 MAT 分析

    MAT 是重头戏,在一些时候, LeakCanary 是不能够完全准确实时的反应出内存的使用以及泄露情况,所以就需要用的专业的工具。

    MAT 是 Memory Analyzer的简称,它是一款功能强大的 Java 堆内存分析器。可以用于查找内存泄露以及查看内存消耗情况。MAT 是基于 Eclipse 开发的,是一款免费的性能分析工具。

    首先如果不想下载 Eclipse ,可以下载 MAT 的单独版本,地址是 https://www.eclipse.org/mat/downloads.php ,选择对应系统下载即可。

    在 mac 系统下使用可能会出现下面的问题:


    231553224485_.pic.jpg

    到提示的目录下看看 log 文件:


    241553224513_.pic.jpg

    打开文件:


    image.png

    原因就是那个 .metadata 文件不能被写入,需要在 MemoryAnalyzer.ini 文件中加入参数,
    1.在安装包上右键显示包内容
    2.进入 mat 文件夹,找到 MemoryAnalyzer.ini
    输入
    -data
    /Users/自己的用户名/mat-log
    注意事项:
    data 参数和路径必须在两个不同的行
    data 参数必须放在 Laucher 之前

    成功打开之后,页面如下:


    image.png

    此时我们需要在 Android Studio 中导出一段时间 Dump 的 hprof 文件,在 Android Studio 3.0 版本前后,导出的步骤略有不同,这里我用的是 3.3.2 的版本。

    image.png

    点击之后 as 下半部分 ui 会开始实时分析该设备的 CPU 内存网络等情况,点击内存那栏:

    image.png

    进入内存分析的详细页面,点击上面的下载按钮开始记录:


    image.png

    此时 as 会开始记录,随后我们右键被记录的那段内存记录,选择导出:


    image.png

    将文件拖到 mat 应用中,选择内存泄露分析:


    image.png

    发现报错了:


    image.png

    这是因为 mat 主要是用来分析 java 的,而 android 的虚拟机导出的内存文件hprof 文件格式与标准的 java hprof 文件格式标准不一样,根本原因两者的虚拟机不一致导致的。可以通过 sdk 自带的命令行转换格式:

    hprof-conv 源文件 目标文件
    

    例如:

    image.png

    此时用 mat 打开导出到桌面的文件:


    image.png

    到此,终于可以开始分析安卓应用详细的内存使用情况了。

    下篇文章将结合具体案例,分析应用是否存在内存泄露,以及应该如何定位。

    相关文章

      网友评论

          本文标题:安卓内存泄露工具使用

          本文链接:https://www.haomeiwen.com/subject/rsgubqtx.html