【发布时间】:2012-09-23 03:23:06
【问题描述】:
我在使用 libGDX 开发 2D 游戏时遇到了一些内存消耗问题。
这是一款具有丰富图形内容的 2D 游戏 - 有许多纹理、动画、字体等。 由于某些原因,所有图形内容都在游戏开始时加载 - 这是内存问题。我在不同的设备上测试了内存分配(本机和堆)并得到了不同的结果: (我已按纹理大小将所有设备分组)
第 1 组(约 840*480 屏幕采用的纹理)
HTC Desire (Froyo): 178Mb(native) - 12Mb(heap) - 应用程序加载成功
HTC One V (ICS): 30Mb(native) - 12Mb(heap) - 应用程序加载成功
HTC Desire S(果冻豆): 30Mb(native) - 12Mb(heap) - 应用程序加载成功
第 2 组(约 1366*768 屏幕采用的纹理)
三星(Google) Galaxy Nexus 329Mb(native) - 18Mb(heap) - 完美运行
Galaxy TAB(蜂窝) 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 的内存分配相同...
终于
我已经通过一些进度条使用按需加载资源来解决这种情况。经过所有尝试,我没有找到另一种方法。
【问题讨论】:
标签: android memory opengl-es libgdx