Via*_*lav 7 memory android opengl-es libgdx
我在使用libGDX开发2D游戏时遇到了一些内存消耗问题.
这是一款具有丰富图形内容的2D游戏 - 有许多纹理,动画,字体等.出于某些原因,所有图形内容都是在游戏开始时加载的 - 这是内存问题.我已经在不同的设备上测试了内存分配(本机和堆)并得到了不同的结果:(我已经按照纹理大小划分了所有设备组)
第1组(纹理采用~840*480屏幕)
HTC Desire(Froyo): 178Mb(本机) - 12Mb(堆) - 应用程序加载成功
HTC One V(ICS): 30Mb(本机) - 12Mb(堆) - 应用程序成功加载
HTC Desire S(Jelly Bean): 30Mb(本机) - 12Mb(堆) - 应用程序加载成功
第2组(纹理采用~1366*768屏幕)
三星(谷歌)Galaxy Nexus 329Mb(原生) - 18Mb(堆) - 效果很好
Galaxy TAB(Honeycomb) 164Mb(本机) - 10Mb(堆) - 应用程序崩溃(Surface.OutOfResouresException).
我认为在所有Android版本上可能存在一些重要的内存管理差异,这给我带来了这些麻烦.
任何人都可以解释在Android 3.x上加载纹理时究竟发生了什么?或者发布一些链接以了解解决此问题需要采取的措施.
一些更新
Toady我在3.x仿真器上做了一些额外的测试(我知道这不是最好的方法,但是之前的日志类似于emu和Galaxy Tab)
最后我在新的谷歌Nexus平板电脑(Jelly Bean)上运行应用程序,该平板电脑使用与3.x平板电脑(1280*800px)相同的纹理 - 约30Mb本机内存和~12Mb vm堆.
现在我完全不了解正在发生的事情 - 相同的内存分配为纹理800*480和1280*800 ......
最后
我已经使用一些进度条按需加载资源解决了这种情况.在所有的尝试后,我没有找到另一种方式.
如果您想知道为什么 Android 3 比 2.X 崩溃更多,那是因为 ByteBuffer 错误。ByteBuffer使用4倍的内存。因此,您必须在 Android 3 中使用较低分辨率的图像。这个问题在 Android 4 中得到了解决。
http://code.google.com/p/android/issues/detail?id=16941
幸运的是,对于 Android 3+,您有大堆选项(提供大约 128+ 兆),这是我必须为我们的应用程序打开的选项。
归档时间: |
|
查看次数: |
4311 次 |
最近记录: |