在游戏关闭时处理 libGDX 资源?
Dispose libGDX resources on game close?
我正在使用 libGDX 并在我不再需要它们时释放我的资源以释放 RAM。游戏结束需要手动处理资源吗?或者这是由 Android(或 libGDX)自动完成的?
事实是有些对象需要手动处理 - 由于引用它们例如:
- 像素图
- 纹理
- 位图
和许多其他人 you will find here。
为了更轻松地管理您的资产,您应该使用 AssetManager. The way how to use is desribed here,但一般模式是:
- 正在创建 AssetManager 实例
- 正在将资产加载到 AssetManager 实例
- 使用资源从提到的对象中获取它们
- 在应用程序生命周期结束时处理 AssetManager 实例
示例代码:
AssetManager assetManager = new AssetManager();
assetManager.load("data/mytexture.png", Texture.class);
assetManager.finishLoading(); //loading resources to asset manager is asynchrous! you can also use .update() method - find it in the reference
...
Texture tex = assetManager.get("data/mytexture.png", Texture.class); //use the asset manager to obtain texture
...
assetManager.clear(); //disposing asset manager with all its resources - you can also use .dispose() method
是的,您必须这样做,否则与所有这些对象关联的本机内存将全部泄漏。在 Android 中关闭一个 Activity(它承载着一个 Libgdx 游戏)不会关闭整个应用程序,因此 OS 和你不会回收内存将丢失您对可以处理的对象的所有引用。
我正在使用 libGDX 并在我不再需要它们时释放我的资源以释放 RAM。游戏结束需要手动处理资源吗?或者这是由 Android(或 libGDX)自动完成的?
事实是有些对象需要手动处理 - 由于引用它们例如:
- 像素图
- 纹理
- 位图
和许多其他人 you will find here。
为了更轻松地管理您的资产,您应该使用 AssetManager. The way how to use is desribed here,但一般模式是:
- 正在创建 AssetManager 实例
- 正在将资产加载到 AssetManager 实例
- 使用资源从提到的对象中获取它们
- 在应用程序生命周期结束时处理 AssetManager 实例
示例代码:
AssetManager assetManager = new AssetManager();
assetManager.load("data/mytexture.png", Texture.class);
assetManager.finishLoading(); //loading resources to asset manager is asynchrous! you can also use .update() method - find it in the reference
...
Texture tex = assetManager.get("data/mytexture.png", Texture.class); //use the asset manager to obtain texture
...
assetManager.clear(); //disposing asset manager with all its resources - you can also use .dispose() method
是的,您必须这样做,否则与所有这些对象关联的本机内存将全部泄漏。在 Android 中关闭一个 Activity(它承载着一个 Libgdx 游戏)不会关闭整个应用程序,因此 OS 和你不会回收内存将丢失您对可以处理的对象的所有引用。