在使用 libGDX 开发 2D 游戏时,我遇到了一些内存消耗问题。
这是一款具有丰富图形内容的 2D 游戏 - 有许多纹理、动画、字体等。由于某些原因,所有图形内容都在游戏开始时加载 - 这是内存问题。我已经在不同的设备上测试了内存分配(本机和堆)并得到了不同的结果:(我已经将所有设备按纹理大小划分为组)
第 1 组(~840*480 屏幕采用的纹理)
HTC Desire (Froyo): 178Mb(native) - 12Mb(heap) -应用程序加载成功
HTC One V (ICS): 30Mb(native) - 12Mb(heap) -应用程序加载成功
HTC Desire S (Jelly Bean): 30Mb(native) - 12Mb(heap) -应用程序加载成功
第 2 组(~1366*768 屏幕采用的纹理)
Samsung(Google) Galaxy Nexus 329Mb(native) - 18Mb(heap) -完美运行
Galaxy TAB (Honeycomb) 164Mb(native) - 10Mb(heap) -应用程序崩溃(Surface.OutOfResouresException)。
我认为所有 android 版本可能存在一些显着的内存管理差异,这给我带来了这些麻烦。
谁能解释在 android 3.x 上加载纹理时到底发生了什么?或者可能发布一些链接以了解解决此问题需要做些什么。
一些更新
今天我在 3.x 模拟器上做了一些额外的测试(我知道这不是最好的方法,但是之前在 emu 和 Galaxy Tab 上的日志是相似的)
- 我运行的游戏采用 1024*600 的纹理 - 应用程序在 80% 的加载资源(158 个本机内存分配)上崩溃
- 使用 800*480 的纹理 - 应用程序在 100% 加载时崩溃(145Mb 本机内存分配)
最后,我在新的 Google Nexus 平板电脑(Jelly Bean)上运行了应用程序,它使用与 3.x 平板电脑(1280*800px)相同的纹理 - ~30Mb 本机内存和 ~12Mb 虚拟机堆。
现在我完全不理解发生了什么——纹理 800*480 和 1280*800 的内存分配相同......
最后
我一直在使用带有一些进度条的按需加载资源来解决这种情况。经过所有尝试,我没有找到另一种方法。