10

当应用程序从启动画面加载到主页时会发生这种情况。它只发生在设备上而不是模拟器上:

05-17 08:10:16.627: I/dalvikvm-heap(14021): Grow heap (frag case) to 20.580MB for     2424256-byte allocation
05-17 08:10:16.666: D/dalvikvm(14021): GC_FOR_ALLOC freed 1K, 3% free 21000K/21511K, paused 21ms
05-17 08:10:16.697: D/dalvikvm(14021): GC_CONCURRENT freed 116K, 3% free 20885K/21511K, paused 2ms+2ms
05-17 08:10:16.720: D/dalvikvm(14021): GC_FOR_ALLOC freed 44K, 4% free 20841K/21511K, paused 10ms
05-17 08:10:16.728: I/dalvikvm-heap(14021): Grow heap (frag case) to 24.533MB for 4310896-byte allocation

我使用了 Ecpise MAT - 字节分配已解决 - Android.Graphics.Bitmap $preloaded images...

我使用的设备是 Google Nexus Prime,Android 4.0

有没有人遇到过同样的情况?有人可以提供一些专业知识....

4

2 回答 2

14

我遇到了同样的问题并找到了解决方案。

你是从资源中加载你的位图吗?如果是这样,请尝试将它们放在相应的可绘制文件夹中,而不是将它们保存在“drawable”或“drawable-mdpi”中。

当您将图像资源放在普通的 drawable 文件夹中时,对于系统来说,这意味着 drawable-mdpi。因此,具有高或超高 dpi 的设备(我认为 Galaxy Nexus 是超高的)将扩展该资源以匹配设备的 dpi。

如果您的资源只有 1 个尺寸,请将它们放入 drawable-nodpi 中,它将按原样使用。但是,您的某些布局可能会受到此影响,因此我将某些图像(如按钮图像等)保留在可绘制文件夹中,并将背景和其他更大的资源移动到 drawable-nodpi 中。

希望这可以帮助 ;)

于 2012-05-17T12:44:12.713 回答
10

您可能正在尝试解码Bitmap导致OutOfMemory异常的非常大的内容。这意味着您尝试实现的操作超出了设备上每个应用程序允许的 VM 预算,就堆内存消耗而言(在您的设备上似乎是 24 MB,在您的模拟器上可能更多,这就是为什么它没有不会发生在那里!)。

尝试对您Bitmap的样本进行两倍的采样,例如:

BitmapFactory.Options o = new BitmapFactory.Options();
o.inSampleSize = 2;
Bitmap b = BitmapFactory.decodeFile(pathToBitmap, o);
于 2012-05-17T12:25:56.240 回答