在libgdx中处理资产和屏幕

时间:2015-08-05 08:35:18

标签: java memory-leaks garbage-collection libgdx dispose

我编写了一个由多个屏幕组成的游戏,每当我需要一个新屏幕时,我就会使用代码

dispose();
game.setScreen(new GameScreen(game));

在dispose方法中,我调用了每个资产的dispose方法,如Textures等。 我还使用资产管理器加载游戏播放屏幕所需的资源。在那种情况下,当我关闭游戏播放屏幕时,我也会拨打AssetManager.clear()

现在,当我启动游戏时,我只有菜单屏幕,使用的内存大约为20MB,然后在游戏播放屏幕中我达到212MB,当我回到菜单屏幕后,在处理AssetManger之后,我仍然有186MB。 主要的问题是,如果我开始一个新的游戏屏幕,内存达到320MB,所以在一些游戏屏幕后游戏达到700MB!

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

您永远不必手动调用Game类的dispose()方法。它会在更改屏幕或关闭应用程序时自动调用。相反,你应该像这样覆盖Game dispose()(从我正在处理的项目中获取的代码):

@Override
public void dispose()
{
   super.dispose();
   assets.dispose();
}

资产对象是我的AssetManager。关闭应用程序后,我希望所有加载的纹理都从内存中销毁。我不能保证什么,但我很确定这是你的问题。