我正在开发一个 Android 应用程序,需要显示 4 个大位图(6 x 屏幕尺寸)。一开始,我对此有疑问,但对适用于整个设备的内存管理进行代码优化。但在 4.0.3 android 版本的 ASUS Transformer Prime 上,出现 OutOfMemory 错误。这很奇怪,因为堆大小似乎为 256Mb。与其他可以正确运行的设备相比,有很多优势。
我们已激活大堆并停用硬件加速。
你知道我们的问题吗?
最佳答案
您的屏幕为 1280x800,因此屏幕大小的 32bpp 位图将需要不到 4MB,而 6 x 屏幕大小的位图将需要 23.5MB。您想要其中四个...即 93.75MB。
进程堆限制因设备而异,但我认为 64MB 已经很大了(也许我落后了时代)。 256MB 太大了!
恕我直言,您根本不应该尝试将如此庞大的位图保留在内存中。您最好将它们分成不大于屏幕的图 block ,并根据需要加载图 block 。
或者,尝试使用 16bpp 图像或在 JNI(即 C 语言)中为大量位图分配空间,并完全绕过 Java 堆管理。
关于android - 为什么 ASUS Transformer Prime 是唯一出现内存不足异常的设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331993/