相同的应用程序在不同的Android设备上使用不同的内存量

时间:2011-03-20 10:07:52

标签: android memory bitmap heap

我正在开发一款游戏,它使用带有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),因为它没有缩放。

1 个答案:

答案 0 :(得分:2)

如何将位图加载到内存中?这只是我的猜测,但也许HTC设备使用24位色彩空间加载位图,而其他设备使用32位色彩空间。每像素24位的2000x2000位图将使用大约12 MB的内存,而每像素32位的相同位图将需要接近16 MB或内存。

相关问题