LibGdx - 切换屏幕时出现严重的内存泄漏

时间:2016-04-14 14:19:11

标签: java android ios memory-leaks libgdx

我有一个带有4个屏幕的用户界面,我的应用程序非常沉重,并且以大约250MB的Ram使用率启动,在我在屏幕之间来回切换几次后,它快速上升,在崩溃之前高达800MB Ram。

这就是我处理的方式:

每个屏幕extends主屏幕,我有这种处理方法:

@Override
    public void dispose()
    {
        stage.dispose();
        System.out.println("Disposing Main Screen");
    }

设置新屏幕时,我这样做:

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

现在我在启动时使用AssetManager加载了所有资源,这意味着我不会卸载/删除屏幕中的任何资源,因为这会导致下一个屏幕显示一个空黑框而不是被处置的资产。但这是一个问题吗?我有很多资源,例如8个不同的BitmapFonts每次加载一个扩展MainScreen的新屏幕时都会初始化。但是,如果我尝试处理这些,我下次尝试初始化时会出错。

剩下的唯一可以解决的问题是纹理/字体,这是导致我问题的原因吗?我应该为每个屏幕加载/卸载吗?这似乎会导致很多用户遇到错误的用户体验。

1 个答案:

答案 0 :(得分:0)

正如@TomGrill Games所说,您应该初始化一次资源,并在主类中使用它们。您可能有一个资源类,在主类中初始化,并从那里调用您的资源。您的代码可能类似于:

game.setScreen(game.mainScreen);

game.setScreen(game.resources.mainScreen);

你也会用你的声音和其他资源做到这一点。