我制作了一个自上而下的游戏,让你的角色在一个关卡中移动。该级别基本上是1600x2400 png。我无法将png加载到内存中,因此当玩家在关卡中移动时,我必须使用BitmapRegionDecoder将其加载到块中。当然这很糟糕,可能导致口吃。我想在后台线程中加载下一个块,但这意味着我在内存中有两个块:当前的一个和下一个块,这将导致OutOfMemoryException。
现在所有设备都至少有512 MB或RAM,那为什么我们仍然对vm ram有那么愚蠢的限制?谷歌告诉我们应该使用多少内存是专制的!让我们来决定!现在我不得不吃更多的cpu周期,因为我无法将整个内容加载到RAM中,更不用说我用这个BitmapRegionDecoder获得的性能更差了!
为什么Google会这样做以及何时结束?这个决定背后的逻辑论点是什么?
答案 0 :(得分:2)
a)512MB RAM并不意味着您的应用可以使用那么多。可用内存仍然非常有限。所以我想它永远不会结束。 VM获得的数量可能会增加,但如果您想保持兼容,那么您必须高效编码。 (例如,分割图像并且不从巨型图像加载数据)
b)您可以使用JNI / NDK / C并自行管理内存,本机代码没有限制。