如何在LibGDX中进行内存管理?

时间:2015-09-15 07:47:55

标签: android memory libgdx

我用三个屏幕做了一个非常简单的游戏。游戏并不是真正的图形密集型。我想丢弃我的一次性物品,但如果我处理它们,这会导致游戏重启/重新访问屏幕时出现问题。我的对象是我的Assets类中的简单纹理和声音,所以我不知道我是否可以在这里加入池。

处理这些对象并在需要时检索它们的最佳方法是什么。

由于

3 个答案:

答案 0 :(得分:1)

Libgdx提供AssetManager,这允许您

  • 加载资源
  • 知道他们何时重装
  • 在您需要时处理它们

初始化示例

AssetManager manager = new AssetManager();
manager.load("data/mytexture.png", Texture.class);

检索加载的资源

Texture tex = manager.get("data/mytexture.png", Texture.class);

处理资源

manager.unload("data/mytexture.png");

处置使用此AssetManager加载的所有资源

manager.clear();

有关AssetManager的所有信息均可在github

上找到

答案 1 :(得分:1)

我不是关于内存管理主题的专家,但这些是我的发现。我还假设您正在使用LibGDX中的Screen

每当您离开屏幕时,无论是通过显示new Screen还是Home按钮,都会调用hide()并且垃圾收集器可能会处置资产。显然,当你自己处理它们时。

每当您显示正在调用的屏幕show()时,您就可以再次加载资源。如果您确实拥有大量资产,建议您使用AssetManager,但由于您声明不这样做,您可能只是在show()方法中重新加载资产。

我猜你正在加载屏幕构造函数中的所有内容。您可能需要做的就是复制加载资产的代码并从那里设置表到show()方法。构造函数只调用一次,因此每当android决定转储您的资产时,例如当您的应用程序当前未显示您的资产时,将不会重新加载。然而,show方法将被调用,你应该没有重新加载那里的一切。如果加载资产需要几毫秒,那么只需将它们加载到那里。否则,您可以使用资产管理器并在其上调用finishloading(),这样您的资产仍然无法加载,并在需要时再次加载。

答案 2 :(得分:1)

听起来你懒得加载你的资产。确保在游戏或屏幕重新启动时始终加载新实例。或者在处理它们之后立即将引用设置为null。

如果您在没有创建新实例的情况下返回到屏幕,则需要在show()方法中加载要处理的内容,因为不会再次调用构造函数。