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

问题描述:

我正在开发一个游戏,它使用来自2000x2000 px图像的位图的活动。相同的应用程序在不同的Android设备上使用不同数量的内存

在我的HTC Hero中,当我运行该活动时,我正在使用12MB。

但是,如果我尝试在任何具有16MB堆的模拟器中运行该应用程序,则虚拟机会因尝试分配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来解码位图?

编辑2:我把图像放在/ drawable中,所以当我用1.5加载它时会变得更大。 如果我把图像放在/ drawable-hdpi中,图像需要更少的内存(12 MB),因为它没有缩放。

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

+0

我的英雄是密度为1的HVGA,这就是为什么。我正在尝试使用WVGA模拟器。我不知道我是否可以在所有设备中将密度设置为1,以便始终获得12MB。 – Antonio 2011-03-20 11:01:09