Android上的Libgdx正确处理

时间:2014-06-23 10:14:54

标签: android libgdx dispose

我目前对我的用于Android的libgdx游戏的dispose()实现不满意。

我目前正在做的事情是,当我的应用程序启动时,将我的所有资产加载到资产管理器中,传递它并使用资产。

我测试了两个不同的东西:首先我根本没有处理,所以当应用程序通过android后面或家中关闭并重新打开时,一切正常,当前屏幕显示正确。我不确定在这种情况下资产会发生什么。它们应该保留在内存中,并且可以在应用程序恢复时重用。但是如果android在后台杀死应用程序会发生什么。我想我的内存泄漏比?

所以我尝试在onPause()回调中处理并重新加载onResume()中的资产。现在我的屏幕不再呈现,所以我认为我必须完全重建它,导致assetmanager.get(...)在scene2d演员控制器现在必须更新?所以我尝试在show()方法中构建场景图,它没有成功,导致我的gamelogic屏幕获取其数据现在扔了很多错误。当用户退出应用程序并重新开始时,我只是从菜单重新启动时解决了这个问题,我对此感到不满意。

另外,我在屏幕的不同部分动态创建FreeTypeFontGenerator的bitmapfonts,隐藏屏幕时我会配置()。所以,我想我也有问题,当应用程序关闭后被android摧毁?

1 个答案:

答案 0 :(得分:3)

您应该使用Game / Screen / ApplicationListener的dispose方法进行处理。当Activity完成时,这将由Android调用,并且是处理所有本机内存的适当位置。它会自动完成。

在Activity完成并创建新的纹理后,您不能指望能够重用已加载的纹理,因此请确保您的资产是在Game / ApplicationListener的create方法中加载的,而不是{{1} }。

由于Android在后台终止您的应用程序,因此不会发生内存泄漏。 Android可以在应用程序杀死时从您的应用程序中回收所有内存。但是如果你的活动被关闭而你的整个申请都没有被杀死,那么你就会泄漏那些没有妥善处理的东西。

当您使用任何实现Disposable的类时,LibGDX中会发生内存泄漏,并且在您使用它时不会将其丢弃。

相关问题