11

我正在尝试学习如何识别和处理我的应用程序中的内存泄漏。我正在阅读这篇很棒的文章,但我对如何在 Android Studio 3.0 附带的新“Android Profiler”工具中应用它感到有些困惑。

我有一个测试应用程序,LeakCanary 指出我的应用程序存在内存泄漏。

事实上,当我运行分析器并按下“dump java heap”时,我可以看到我的 MyCollectionActivity 有 4 个实例,当我单击这些实例时,我可以看到详细信息:

在此处输入图像描述

但是文章中显示的工具有我在“Android Profiler”中看不到的选项:

我不会深入讨论如何导航巨大的内存堆。相反,我会将您的注意力引向下方屏幕截图右上角的分析器任务。要检测上面示例中引入的内存泄漏,您所要做的就是检查 Detect Leaked Activities,然后按 play 以使泄漏的活动显示在 Analysis Results 下。

例如,在新工具中,显示有泄漏实例的“分析器任务”和“分析结果”在哪里?

在此处输入图像描述

如果我们选择泄露的活动,我们会看到一个参考树,其中可以识别保持活动活动的参考。通过查找深度为零的实例,我们发现位于位置管理器中的实例 mListener 是我们的活动无法被垃圾收集的原因。

该 Android Profiler 的图像也没有显示参考树,它显示了参考,但它似乎不是很有用。

4

1 回答 1

9
  1. 首先,您需要保存Heap Dump。转储保存扩展名为hprof。检查下面附加的图像以保存此文件。
  2. 在 Android Studio 中打开同一个文件,之后,您将能够在右上角看到Analyzer Tasks选项。

在此处输入图像描述

于 2018-04-23T07:30:09.473 回答