我编写了一个由多个屏幕组成的游戏,每当我需要一个新屏幕时,我就会使用代码
dispose();
game.setScreen(new GameScreen(game));
在dispose方法中,我调用了每个资产的dispose方法,如Textures等。
我还使用资产管理器加载游戏播放屏幕所需的资源。在那种情况下,当我关闭游戏播放屏幕时,我也会拨打AssetManager.clear()
。
现在,当我启动游戏时,我只有菜单屏幕,使用的内存大约为20MB,然后在游戏播放屏幕中我达到212MB,当我回到菜单屏幕后,在处理AssetManger之后,我仍然有186MB。 主要的问题是,如果我开始一个新的游戏屏幕,内存达到320MB,所以在一些游戏屏幕后游戏达到700MB!
我的代码出了什么问题?
答案 0 :(得分:1)
您永远不必手动调用Game类的dispose()方法。它会在更改屏幕或关闭应用程序时自动调用。相反,你应该像这样覆盖Game dispose()(从我正在处理的项目中获取的代码):
@Override
public void dispose()
{
super.dispose();
assets.dispose();
}
资产对象是我的AssetManager。关闭应用程序后,我希望所有加载的纹理都从内存中销毁。我不能保证什么,但我很确定这是你的问题。