Java 在libgdx中处置资产和屏幕

Java 在libgdx中处置资产和屏幕,java,memory-leaks,garbage-collection,libgdx,dispose,Java,Memory Leaks,Garbage Collection,Libgdx,Dispose,我编写了一个由多个屏幕组成的游戏,每次我需要一个新屏幕时,我都会使用代码 dispose(); game.setScreen(new GameScreen(game)); 在dispose方法中,我调用了每个资源(如纹理等)的dispose方法。 我还使用资产管理器加载游戏屏幕所需的资产。在这种情况下,当我关闭游戏屏幕时,我也会调用AssetManager.clear() 现在,当我开始游戏时,我只有菜单屏幕,使用的内存约为20MB,然后在游戏屏幕中我达到212MB,当我回到菜单屏幕时,在处理

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

dispose();
game.setScreen(new GameScreen(game));
在dispose方法中,我调用了每个资源(如纹理等)的dispose方法。 我还使用资产管理器加载游戏屏幕所需的资产。在这种情况下,当我关闭游戏屏幕时,我也会调用
AssetManager.clear()

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


我的代码怎么了?

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


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

你是如何衡量内存使用情况的?在检查之前,你是否在做GC?我在active Apps下查看android手机中的内存值。你应该在得出内存使用的任何结论之前进行GC,因为堆中可能有死对象。
@Override
public void dispose()
{
   super.dispose();
   assets.dispose();
}