Android堆大小限制,我们真的还需要设计16MB限制的应用程序吗?

Android堆大小限制,我们真的还需要设计16MB限制的应用程序吗?,android,memory,memory-management,Android,Memory,Memory Management,正如标题所说,我是否仍应该围绕16MB的堆大小限制来设计我的应用程序?我问这个问题的原因是我最近一直在开发一款游戏,在我将近2岁的Droid2上运行良好。但当我使用堆大小限制为16MB的AVD测试我的应用程序时,我会出现内存不足的错误。用DDMS监控我的应用程序显示,为我的游戏分配的总内存约为20MB。这并不是一个很大的区别,但是让我的游戏在16MB的限制下运行会对视觉效果造成很大的伤害 现在,如果这是2008年,我甚至不会问这个问题。但现在是2012年,距离G1首次亮相将近4年。可以肯定地说,

正如标题所说,我是否仍应该围绕16MB的堆大小限制来设计我的应用程序?我问这个问题的原因是我最近一直在开发一款游戏,在我将近2岁的Droid2上运行良好。但当我使用堆大小限制为16MB的AVD测试我的应用程序时,我会出现内存不足的错误。用DDMS监控我的应用程序显示,为我的游戏分配的总内存约为20MB。这并不是一个很大的区别,但是让我的游戏在16MB的限制下运行会对视觉效果造成很大的伤害


现在,如果这是2008年,我甚至不会问这个问题。但现在是2012年,距离G1首次亮相将近4年。可以肯定地说,过去一年制造的大多数手机允许应用程序分配超过16MB的内存吗?或者我真的在设计应用程序时没有考虑到16MB的限制,这真的是在自讨苦吃吗?

堆限制取决于设备分辨率(可能还有其他因素)。因此,在高分辨率设备上,堆限制可能为30MB,而在低分辨率G1上,堆限制为16MB。通常,您应该相应地更改图形,以便低分辨率设备使用低分辨率图形(占用更少的空间),而高分辨率设备使用高分辨率图形(占用更多的空间)。

是的,我们仍然需要它,但不是在所有情况下都需要它。 若您使用的是本机代码,那个么c编译器分配的内存不包括在这个限制内。所以您可以为应用程序的基本组件提供更多的内存。 第二种方法是使用OpenGL使用纹理绘制图像。然后这些纹理的内存不包括有限的内存

但这些技术不可能在所有情况下都实现


更重要的是,您不能完全使用这30 MB。一个应用程序只能使用其中的30%。

谢谢,您的帖子让我意识到为什么我的应用程序在emulator中首先会崩溃。我用大屏幕分辨率设置了AVD,但没有相应地增大堆大小。当我回去将屏幕分辨率改为与原来的G1类似的分辨率时,我的游戏运行得非常完美,没有超过16MB的堆大小限制。我把我的旧手机保留了5年。我希望我的Droid2G也能保留5年。@Chloe-你每年花多少钱购买新的应用程序?[我的观点是,作为一个应用程序制造商,每个人都必须决定支持超过一定年龄的设备需要付出多大的努力。花很多钱购买应用程序的人通常都有较新的手机。当然,简单的改变,如低分辨率的图形。但在某些情况下,支持较旧的设备可能不值得。]@工具制造商几乎什么都不做。我只保留了我的机器人2G大约2年。这完全是一堆废话,只是坐在桌子上就不断重启。我多次想把它扔出窗外。我买了一部iPhone 5,现在已经有5年了。“一个应用程序只能使用其中的30%。”一起打开5个应用程序怎么样?@YoushaAleayoub-这个限制就是你的应用程序所看到的堆。它不是在所有应用程序之间共享的。我不是专家,但我想Tofeeq是说你的应用程序堆包含了很多由操作系统分配给你的应用程序的东西。[或者可能是由操作系统分配给共享使用,但它会显示在您的堆限制中-这一部分我很模糊。]当设备的总RAM耗尽时,操作系统就会开始关闭旧的应用程序。