【问题标题】:Disposing assets and Screens in libgdx在 libgdx 中处理资产和屏幕
【发布时间】:2015-08-05 08:35:17
【问题描述】:

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

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

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

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

我的代码有什么问题?

【问题讨论】:

  • 您如何测量内存使用情况?你在检查之前做 GC 吗?
  • 我在活跃的应用下查看我的安卓手机的内存值
  • 在得出任何关于内存使用的结论之前,您应该进行一次 GC,因为堆中可能有死对象。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多