android - 为什么 ASUS Transformer Prime 是唯一出现内存不足异常的设备

标签 android out-of-memory tablet android-4.0-ice-cream-sandwich

我正在开发一个 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/

相关文章:

java - 在 Android 平板电脑上调用 getSimCountryIso() 时会发生什么?

android - 安卓平板视频制作软件

java - Firebase 获取 child 的 child 的引用

android - 试图防止 OutOfMemoryError 看到 MAT - Android

memory - Spring webflow 使用大量内存

Android 外部分配太大,但为什么?

c# - 防止平板电脑在应用程序运行时休眠

Android 2d Canvas 游戏: FPS Jitter problem

java - 结合 Java 枚举和点语法 (enum.value1.value2)?

Android 注入(inject)触摸事件