Android:由于位图导致的HONEYCOMB堆前后使用情况?

时间:2012-05-20 17:49:48

标签: android memory-management bitmap heap virtual-machine

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

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

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

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

2 个答案:

答案 0 :(得分:3)

我也很担心,但在此期间我得到了Google的答复,这证实了我的以下假设:

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

来自Romain Guy(Android Framework工程师)的回答:

“这是正确的。你的应用程序会使用相同数量的内存并发布在Honeycomb之后。”

答案 1 :(得分:0)

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

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