【问题标题】:How to find Memory Leak Class/Activity in Android如何在 Android 中查找内存泄漏类/活动
【发布时间】:2010-09-15 03:10:54
【问题描述】:

我是这个 Android 平台的新手。在一个应用程序中,存在内存泄漏。但我无法找到内存泄漏发生在哪个活动或类中。

我正在使用 MAT 来确认是否存在内存泄漏。但无法找到泄漏的活动。

请告诉我如何找到正在泄漏的活动。

谢谢。

【问题讨论】:

标签: android memory-leaks


【解决方案1】:

即使这个问题是老生常谈。我认为带有图像的小教程可能会有所帮助。所以首先你需要安装MAT plugin。重启后点击Dump HPROF文件

一段时间后(大约 30 秒),您会看到一个对话框,您可以在其中单击完成。比你得到这个视图:

您在其中左键单击最大的部分并过滤带有传出引用。然后你会在这里看到这个视图:

在这里你可以看到我错过了删除我的 ContentManager 中的项目,其中几个项目存储在我的 pending HashMap

【讨论】:

    【解决方案2】:

    我发现的关于在 android 平台上跟踪内存泄漏的最佳帖子是:

    http://ttlnews.blogspot.com/2010/01/attacking-memory-problems-on-android.html

    第一部分已经过时,因为它现在已集成到 Eclipse 中,但大部分帖子都很棒!

    【讨论】:

    • 您链接的文章是我在检测 Android 中的内存泄漏方面遇到的最有用的文章。一百万个赞。
    【解决方案3】:

    使用 LeakCanary - 适用于 Android 和 Java 的内存泄漏检测库。 当您的调试版本中检测到活动内存泄漏时,LeakCanary 将自动显示通知。安装这个库非常简单。

    https://github.com/square/leakcanary

    通知示例:

    【讨论】:

      【解决方案4】:

      我无法对上一篇文章发表评论,但重要的是要意识到您绝对应该担心内存管理,尤其是在 Android 移动平台这种资源受限的环境中。有关更多信息,请查看此处:

      http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html

      【讨论】:

      • 回避只能让你走这么远。有时,第三方库会导致您的代码出错。
      【解决方案5】:

      您可以在 DDMS 中看到它。

      只需选择您的应用程序包名称,然后单击上面的更新堆按钮。

      现在转到 Heap Tab 点击 Cause GC。

      您将找到所用对象的列表。

      【讨论】:

        【解决方案6】:

        您可以使用MMAT自动分析android内存泄漏,MMAT github page

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-25
          • 1970-01-01
          • 2021-12-05
          • 1970-01-01
          • 2017-07-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多