相同的应用程序在不同的 Android 设备上使用不同的内存量
我正在开发一个游戏,该游戏使用带有来自 2000x2000 像素图像的位图的活动。
在我的 HTC Hero 中,当我运行该活动时,我使用了 12MB。
但是,如果我尝试在任何具有 16MB 堆的模拟器中运行该应用程序,虚拟机就会崩溃,因为尝试分配 16.4MB 时出现 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),因为它没有缩放。
I'm developing a game which uses an activity with a Bitmap from a 2000x2000 px Image.
In my HTC Hero when I run the activity I'm using 12MB.
However if I try to run the app in any emulator with 16MB heap, the VM crashes because of a OutOfMemoryError trying to allocate 16,4 MB; how it is possible?
I tried too with other emulator and got 20MB used.
To measure the amount of memory I'm using this :
int usedMegs = (int) (Debug.getNativeHeapAllocatedSize() / 1048576L);
String usedMegsString = String
.format(" - Memory Used: %d MB", usedMegs);
getWindow().setTitle(usedMegsString);
Why does the same bitmap need 12MB in a HTC Hero and 20MB in other devices?
Edit : I figured out it's cause of the density.
Density 1 = 12MB , Density 0.75 = 8MB and Density 1.5 = 20MB ( Not exactly, some MB are from other activities)
Can I say to a 1.5 density device to use 1 to decode the Bitmap???
Edit 2 : I had the image in /drawable so when I loaded it with 1.5 was made bigger.
If I put the image in /drawable-hdpi the image need less memory (12 MB) becaus it isn't scaled.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您如何将位图加载到内存中?这只是我的猜测,但也许 HTC 设备正在使用 24 位色彩空间加载位图,而其他设备正在使用 32 位色彩空间。每像素 24 位的 2000x2000 位图将使用大约 12 MB 的内存,而每像素 32 位的相同位图将需要接近 16 MB 的内存。
How are you loading your bitmap into memory? This is just speculation on my part, but perhaps the HTC device is loading the bitmap using a 24-bit colorspace while other devices are using a 32-bit colorspace. A 2000x2000 bitmap at 24 bits per pixel would use roughly 12 MB of memory, while the same bitmap at 32 bits per pixel would need closer to 16 MB or memory.