我正在开发一款游戏,它使用带有2000x2000 px图像的位图的活动。
在我的HTC Hero运行活动时,我使用的是12MB。
但是,如果我尝试在任何具有16MB堆的模拟器中运行该应用程序,则VM会因为尝试分配16,4 MB的OutOfMemoryError而崩溃;怎么可能?
我也尝试过使用其他模拟器并使用了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来解码Bitmap ???
编辑2:我将图像放在/ drawable中,所以当我用1.5加载它时会变得更大。 如果我将图像放在/ drawable-hdpi中,图像需要更少的内存(12 MB),因为它没有缩放。
答案 0 :(得分:2)
如何将位图加载到内存中?这只是我的猜测,但也许HTC设备使用24位色彩空间加载位图,而其他设备使用32位色彩空间。每像素24位的2000x2000位图将使用大约12 MB的内存,而每像素32位的相同位图将需要接近16 MB或内存。