Android 内存:如何在不使用 Profiler 的情况下检查内存?

问题描述

我的应用程序存在 OOM 错误 (OutOfMemory) 问题。似乎是由于一个对象在内存中占用的空间越来越大,但我无法找到哪个。

我想使用 Android Profiler 来查找问题。但是我有一个使用大量设备处理器和内存的实时应用程序,当我使用 Profiler 时,该应用程序变得非常慢并且几乎无法使用(我需要以正常速度使用该应用程序至少 3 分钟才能看到内存逐渐增长)。

我的问题是:

  • 有没有办法使用 Profiler 而不会出现这种减速问题?
  • 如果没有,是否有其他工具或方法可以帮助我找到内存中增长的对象?

谢谢!

解决方法

您可以使用 adb shell

收集应用的堆转储
adb shell am dumpheap <PID> <TARGET_FILE>

并使用 android studio profiler

查看导出的文件

或者,如果您知道应用程序中 OOM 发生的确切时间,您可以使用 this method Debug.dumpHprofData(String)

收集堆转储 ,

为了减轻分析器对应用程序的影响,您可以采取以下措施:

  1. Allocation Tracking 更改为 None(工具栏上的下拉框)

  2. 直到稍后才附加分析器。只需 Run 应用程序,然后当它接近您要分析的点时,打开 Profiler 标签并按下左侧 + 面板上的 SESSIONS 按钮,然后选择正确的设备和进程进行配置。