美文网首页
2018-11-15

2018-11-15

作者: T_Oner | 来源:发表于2018-11-15 21:33 被阅读4次

排查步骤:

  1. 抓取 Java 堆信息,有三种方法

    1. SDK 的 DDMS 来抓取

    2. 用 Android Studio 集成的 DDMS 抓取

    3. 通过 shell 抓取

      shell 抓取是通过 ActivityManager 来抓取的

      命令:am dumpheap [pid] [filePath] ,最好用 root 权限去抓取,注意,有 root 权限抓取后要对生成的文件改权限。

      然后拉取到电脑上

  2. 打开 hprof 文件有很多方法,我常用的是 MAT 和 Android Studio

    1. 如果是 Android Studio 的话,抓取出来的 hprof 文件就可以直接用
    2. 如果是用 MAT 来分析,那就需要先将 hprof 转码,用 SDK 提供的工具可以转码。hprof-conv [inputFile] [outputFile]
  3. 开始分析

抓取 Java 堆信息

有三种方法

  1. SDK 的 DDMS 来抓取

  2. 用 Android Studio 集成的 DDMS 抓取

  3. 通过 shell 抓取

    shell 抓取是通过 ActivityManager 来抓取的

    命令:am dumpheap [pid] [filePath] ,最好用 root 权限去抓取,注意,有 root 权限抓取后要对生成的文件改权限。

    然后拉取到电脑上

打开 Hprof 文件

打开 hprof 文件有很多方法,我常用的是 MAT 和 Android Studio

  1. 如果是 Android Studio 的话,抓取出来的 hprof 文件就可以直接用
  2. 如果是用 MAT 来分析,那就需要先将 hprof 转码,用 SDK 提供的工具可以转码。hprof-conv [inputFile] [outputFile]

分析

分析可以采用 As 的一键分析,也可以用 Leakcarry,都很方便。当然也可以使用 MAT 查看Activity 对象的数量,数量不正常就是这个 Activity 有泄漏,查看他被哪个引用了。最常见的泄漏形式是静态全局引用;非静态内部类Handler泄漏等等。

相关文章

网友评论

      本文标题:2018-11-15

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