我制作了一个自上而下的游戏,角色在一个关卡中移动。水平基本上是一个1600x2400 png。我无法将该png加载到内存中,所以我必须使用BitmapRegionDecoder在玩家在关卡中移动时将其加载到区块中。当然这很糟糕,可能导致口吃。我想在后台线程中加载下一个块,但这意味着我在内存中有两个块:当前块和下一个块,这会导致OutOfMemoryException异常。为什么android将vm内存大小限制为任意24或32 MB?
现在所有的设备至少有512 MB或RAM,为什么我们仍然对vm ram有那么愚蠢的限制?谷歌专心告诉我们应该使用多少内存!让我们来决定!现在我不得不吃更多的CPU周期,因为我不能将所有东西加载到RAM中,更不用说我使用此BitmapRegionDecoder获得的更糟糕的性能!
任何想法为什么谷歌这样做,什么时候会结束?这个决定背后的逻辑论据是什么?
我想关于分割图像的想法并不是那么好。这是由于不同设备的屏幕分辨率不同所致。我非常肯定,作者试图让游戏在不同设备上看起来很相似,这意味着如果设备的屏幕分辨率比用户看到的更多,而不是拉伸和模糊的小块。因此,它是一个真正的困境,解码区域,并获得内存不足或分割,并在某些情况下获得低质量的产品。而这款AOS虚拟机的内存限制真的很糟糕! – Stan 2013-07-08 07:00:45
如果你有任意大的图像,例如谷歌地图,将图片拆分成图块是一个好主意。你显然需要做更多的事情来显示它,就好像它是一个图像一样,但你获得了图像大小的完全独立性。你可以从这个例子看出,如果你做得对,你没有模糊的图像。这只是加载单个图像不容易。 – zapl 2013-07-08 12:48:23
同意,我记住这一点,我的意思是还有很多工作要做。另一方面还有很多工作要做==更多的机会得到滞后/口吃等。 – Stan 2013-07-08 14:47:30