我正在尝试学习如何识别和处理我的应用程序中的内存泄漏。我正在读这个很棒的文章 https://medium.com/freenet-engineering/memory-leaks-in-android-identify-treat-and-avoid-d0b1233acc8,但我对如何在 Android Studio 3.0 附带的新“Android Profiler”工具中应用它有点困惑。
我有一个测试应用程序,LeakCanary 指出我的应用程序存在内存泄漏。
事实上,当我运行分析器并按“dump java heap”时,我可以看到 MyCollectionActivity 有 4 个实例,当我单击这些实例时,我可以看到详细信息:
但文章中显示的工具具有我在“Android Profiler”中看不到的选项:
我不会深入讨论如何浏览巨大的内存堆。
相反,我将引导您注意上方的分析器任务
下面屏幕截图的右上角。您所要做的就是检测
上例中介绍的内存泄漏是检查Detect Leaked
活动,然后按播放以显示泄露的活动
在分析结果下。
例如,在新工具中,显示存在泄漏的实例的“分析器任务”和“分析结果”在哪里?
如果我们选择泄露的活动,我们会看到一个参考
保持活动活动的引用可以位于树中
确定。通过寻找深度为零的实例,我们发现
位于位置管理器内的实例 mListener 是原因
我们的活动不能被垃圾收集。
Android Profiler 的图像也没有显示参考树,它显示了参考,但它似乎不是很有用。
- 首先,您需要save the 堆转储。带扩展名的转储保存hprof。检查下面所附的图像以保存此文件。
- 在Android Studio中打开同一个文件,之后你将能够看到分析器任务右上角的选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)