【发布时间】:2010-09-15 03:10:54
【问题描述】:
我是这个 Android 平台的新手。在一个应用程序中,存在内存泄漏。但我无法找到内存泄漏发生在哪个活动或类中。
我正在使用 MAT 来确认是否存在内存泄漏。但无法找到泄漏的活动。
请告诉我如何找到正在泄漏的活动。
谢谢。
【问题讨论】:
标签: android memory-leaks
我是这个 Android 平台的新手。在一个应用程序中,存在内存泄漏。但我无法找到内存泄漏发生在哪个活动或类中。
我正在使用 MAT 来确认是否存在内存泄漏。但无法找到泄漏的活动。
请告诉我如何找到正在泄漏的活动。
谢谢。
【问题讨论】:
标签: android memory-leaks
即使这个问题是老生常谈。我认为带有图像的小教程可能会有所帮助。所以首先你需要安装MAT plugin。重启后点击Dump HPROF文件:
一段时间后(大约 30 秒),您会看到一个对话框,您可以在其中单击完成。比你得到这个视图:
您在其中左键单击最大的部分并过滤带有传出引用。然后你会在这里看到这个视图:
在这里你可以看到我错过了删除我的 ContentManager 中的项目,其中几个项目存储在我的 pending HashMap。
【讨论】:
我发现的关于在 android 平台上跟踪内存泄漏的最佳帖子是:
http://ttlnews.blogspot.com/2010/01/attacking-memory-problems-on-android.html
第一部分已经过时,因为它现在已集成到 Eclipse 中,但大部分帖子都很棒!
【讨论】:
使用 LeakCanary - 适用于 Android 和 Java 的内存泄漏检测库。 当您的调试版本中检测到活动内存泄漏时,LeakCanary 将自动显示通知。安装这个库非常简单。
https://github.com/square/leakcanary
通知示例:
【讨论】:
我无法对上一篇文章发表评论,但重要的是要意识到您绝对应该担心内存管理,尤其是在 Android 移动平台这种资源受限的环境中。有关更多信息,请查看此处:
http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html
【讨论】:
您可以在 DDMS 中看到它。
只需选择您的应用程序包名称,然后单击上面的更新堆按钮。
现在转到 Heap Tab 点击 Cause GC。
您将找到所用对象的列表。
【讨论】:
您可以使用MMAT自动分析android内存泄漏,MMAT github page
【讨论】: