4

我正在为 Android 2.2 及更高版本开发图形密集型应用程序。

我知道从 Honeycomb 开始,位图存储在 VM_HEAP 而不是它们的本机位图堆上。

这会影响我的应用程序的有效内存使用吗?我的意思是,例如,如果我的用于预蜂窝设备的应用程序使用 X MB 的 VM 堆,并且有 Y MB 位图(存储在本机堆上),那么我希望它不会开始使用 VM 堆中的 X+Y MB如果它安装在 Honeycomb 或更新的设备上。

这听起来不合逻辑。相反,我猜位图大小甚至在 Honeycomb 之前就已计入 VM 限制,否则为什么会出现“位图大小超出 VM 预算”错误?因此它们存储在其本机堆上,但仍计入 VM_HEAP 大小最大值)。

4

2 回答 2

3

我也很担心,但同时我得到了谷歌的答复,这证实了我的以下假设:

“这听起来不合逻辑。相反,我猜位图大小甚至在 Honeycomb 之前就已计入 VM 限制,否则为什么会出现“位图大小超出 VM 预算”错误?所以它们存储在其本机堆上但仍被计入最大 VM_HEAP 大小)。”

Romain Guy(Android 框架工程师)的回答:

“没错。你的应用程序在 Honeycomb 前后使用相同数量的内存。”

于 2012-05-21T01:53:23.783 回答
0

AFAIK 它在蜂窝中发生了变化。位图现在存储在您的 dalvik 堆(VM_HEAP)中,而不是像以前版本那样存储在本机堆中。(也许是因为他们不想再依赖 SKia GC)

现在需要更认真地管理位图,因为在 2.2 上运行良好的位图可能会在 3.0 中出现 OOM 异常,因为同一图像在平板电脑上占用更多像素(可能不适用于 4.0,不确定)。

于 2012-05-20T18:04:18.547 回答