【发布时间】:2011-03-20 10:07:51
【问题描述】:
我正在开发一个游戏,它使用来自 2000x2000 像素图像的位图的活动。
在我的 HTC Hero 中,当我运行 Activity 时,我使用了 12MB。
但是,如果我尝试在任何具有 16MB 堆的模拟器中运行应用程序,VM 会因为 OutOfMemoryError 尝试分配 16.4 MB 而崩溃;怎么可能?
我也尝试过使用其他模拟器并使用了 20MB。
要测量我正在使用的内存量:
int usedMegs = (int) (Debug.getNativeHeapAllocatedSize() / 1048576L);
String usedMegsString = String
.format(" - Memory Used: %d MB", usedMegs);
getWindow().setTitle(usedMegsString);
为什么同一位图在 HTC Hero 中需要 12MB 而在其他设备中需要 20MB?
编辑:我发现这是密度的原因。 密度 1 = 12MB ,密度 0.75 = 8MB 和密度 1.5 = 20MB(不完全是,一些 MB 来自其他活动)
我可以对 1.5 密度的设备说使用 1 来解码位图吗???
编辑 2:我在 /drawable 中有图像,所以当我用 1.5 加载它时,它变得更大了。 如果我将图像放在 /drawable-hdpi 中,图像需要更少的内存 (12 MB),因为它没有缩放。
【问题讨论】:
标签: android memory bitmap heap-memory