安卓中的内存分析工具?

22

我只是想知道如何在Android中使用内存分析器工具。请告诉我如何操作以了解特定项目的内存泄漏情况。有人可以为此提供逐步操作步骤吗?

7个回答

23
  1. 在Eclipse中打开DDMS透视图。
  2. 选择设备选项卡。
  3. 选择要为其制作转储的进程。
  4. 点击转储HPROF文件按钮。假设已安装MAT,则会生成转储文件并打开MAT窗口。
  5. 在向导窗口中选择泄漏嫌疑报告,然后点击完成

就这样了。您将看到可能存在泄漏的列表,但其中一些是误报。我建议您运行要检查泄漏的活动几次,然后再次运行MAT。


1
谢谢,让我来看看......实际上,我想知道一个特定项目或活动的内存泄漏情况,我该如何加载特定项目以检测内存泄漏。 - Taruni
希望你没有成千上万的泄漏,这样就不会太难找到特定对象的所有泄漏。但我认为MAT没有这样的功能来搜索某些对象的泄漏。它只是搜索所有可能的泄漏。 - Michael
1
当您在DDMS视角中打开设备选项卡时,您将看到设备列表,对于每个设备,都会有一个启动在该设备上的进程列表。其中一个进程将是您的应用程序进程。它的名称等于您的应用程序的包名称。选择此进程并按照下一步操作。 - Michael
我尝试了不同的模拟器,但仍然遇到相同的错误...有没有其他方法可以找到内存泄漏而不使用MAT...还有其他用于内存分析的工具吗... - Taruni
也许吧,但我认为MAT是最受欢迎的,而且我只用过它。 - Michael
显示剩余4条评论

4

谢谢,让我来看看。 - Taruni
实际上,我想了解特定项目或活动的内存泄漏情况,我应该如何加载特定项目以检测内存泄漏。 - Taruni
在使用DDMS模式时,我遇到了以下错误:hprof:无法打开/sdcard/profileit.ImageDemo.hprof-hptemp:权限被拒绝。 - Taruni

1

当你没有使用android.permission.WRITE_EXTERNAL_STORAGE时,写入hprof会失败。作为一个特殊情况,当你在设备上进行测试时,请检查你的SD卡是否连接在仅充电模式下,否则你将无法在SD卡上进行写入操作。


0
我建议看一下Leak Canary。它不是一个内存分析器,而是一个泄漏检测器。只需使用您的应用程序,打开和关闭活动,并让库完成其工作。它甚至会告诉您泄漏发生的位置。在泄漏发生后,请给泄漏分析器一些时间来完成其工作 - 通常需要大约2分钟或更长时间才能找到泄漏源。

0
  • 安装MAT

  • 转到工具->Android ->Android设备监视器(DDMS)

  • 在左上角的设备下,选择项目名称并单击更新堆

  • 然后单击转储HPROF文件并将其保存在桌面上。

  • 然后运行命令提示符并指出Android-sdk目录。

    例如:hprof-conv位于E目录中。因此,请运行以下命令:cd android/sdk/platform-tools

  • 最后,根据此doc引用运行此命令以将此文件格式转换为在MAT中读取它。

    E:\Android\sdk\platform-tools> hprof-conv "C:\Users\Steve\Desktop\yourfilename.hprof" "C:\Users\Steve\Desktop\leakage.hprof"

  • 现在您的文件将转换为leakage.hprof。检查此文件并在MAT中打开它。

编辑: 点击 详情,然后它会显示类名。在那里 左键单击 -> 路径到GC根 -> 带所有引用。然后它会显示类名。


0
Square开源了一个内存分析工具:LeakCanary
LeakCanary的核心是MAT。

-2
请升级到 Android Studio 版本 1.41.5。 在这个版本中,Android 支持了一个新的工具,叫做 Analyzer Task。 它非常有用,可以避免内存泄漏。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接