问题描述
我的应用程序存在 OOM 错误 (OutOfMemory) 问题。似乎是由于一个对象在内存中占用的空间越来越大,但我无法找到哪个。
我想使用 Android Profiler 来查找问题。但是我有一个使用大量设备处理器和内存的实时应用程序,当我使用 Profiler 时,该应用程序变得非常慢并且几乎无法使用(我需要以正常速度使用该应用程序至少 3 分钟才能看到内存逐渐增长)。
我的问题是:
- 有没有办法使用 Profiler 而不会出现这种减速问题?
- 如果没有,是否有其他工具或方法可以帮助我找到内存中增长的对象?
谢谢!
解决方法
您可以使用 adb shell
adb shell am dumpheap <PID> <TARGET_FILE>
查看导出的文件
或者,如果您知道应用程序中 OOM 发生的确切时间,您可以使用 this method Debug.dumpHprofData(String)
为了减轻分析器对应用程序的影响,您可以采取以下措施:
-
将
Allocation Tracking
更改为None
(工具栏上的下拉框) -
直到稍后才附加分析器。只需
Run
应用程序,然后当它接近您要分析的点时,打开Profiler
标签并按下左侧+
面板上的SESSIONS
按钮,然后选择正确的设备和进程进行配置。