【发布时间】:2012-03-28 01:10:39
【问题描述】:
我正在尝试找出为什么我的应用使用了这么多内存。我经常看到它使用 15 到 18MB,这大大高于我的预期。我通过 DDMS 查看了堆大小并看到了这个:
这看起来有点可疑,因为我的应用根本不处理大图像。事实上,我的应用程序中可绘制的总和约为 250KB。所以我创建了一个堆转储并使用 MAT 来定位所有这些内存的去向。 byte[] 数组是迄今为止最大的消费者,所以我深入研究并注意到以下内容:
我完全不知道为什么 sPreloadedDrawables 会造成如此高的保留堆大小。我也不知道如何确定根本原因,或者如何“修复”它。
我应该从这里去哪里?我的应用程序主要通过根本不处理图像数据的服务在后台运行。我确实有用户可以选择使用的活动,但同样,他们使用小型可绘制对象,不能解释如此大的堆大小。我还检查了任何令人讨厌的 Activity 泄漏等情况,但没有找到。
编辑:我注意到在模拟器中运行时堆大小要小得多。这很令人困惑。 :/
【问题讨论】:
-
您的手机运行的是哪个 Android 版本?我注意到 ICS 会预加载图像可绘制对象,我想尝试获得更流畅的 UI 体验并利用增加的 VM 内存限制。因此,如果您的手机在 ICS 上,而您的模拟器在 2.X 上,这将解释差异。我个人还没有测试过运行 4.X 的模拟器来检查膨胀的内存是否也存在(我想我以后要做点什么)。它肯定在我运行 4.0.3 的手机上。
-
我的手机运行的是 Android 4.0.3,模拟器也是。
-
您在模拟器和设备上使用的屏幕密度/尺寸是多少?
-
当您的应用在前台运行时,为什么要担心堆大小?除非您的应用作为服务运行
标签: android memory-management ddms