android - Android 上的 Libgdx 并正确处理

标签 android libgdx dispose

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

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

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

所以我尝试在 onPause() 回调中进行处理并在 onResume() 中重新加载资源。现在我的屏幕不再渲染,所以我认为我必须完全重建它,导致 assetmanager.get(...)在 scene2d 中, Actor 委托(delegate)人现在必须更新吗?所以我尝试在 show() 方法中构建场景图,但没有成功,导致屏幕获取数据的游戏逻辑现在抛出了很多错误。我解决了这个问题,只是在用户退出应用程序并恢复时从菜单重新启动,这我对此都不满意。

此外,我使用 FreeTypeFontGenerator 在屏幕的不同部分动态创建位图字体,在隐藏屏幕时我将其 dispose() 。所以,我想我这里也有一个问题,当应用程序关闭并随后被 android 销毁时?

最佳答案

您应该在 Game/Screen/ApplicationListener 的 dispose 方法中进行处理。当 Activity 完成时,Android 会调用此函数,并且是处置所有 native 内存的适当位置。它是自动完成的。

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

Android 在后台杀死您的应用程序不会导致内存泄漏。 Android 能够在杀死应用程序时从应用程序中回收所有内存。但是,如果您的 Activity 关闭而整个应用程序没有被终止,那么您将泄漏未正确处理的内容。

当您使用任何实现 Disposable 的类时,LibGDX 中会发生内存泄漏,并且在使用完毕后没有释放它。

关于android - Android 上的 Libgdx 并正确处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24363419/

相关文章:

android gradle 失败 "AAPT: error: resource color/com_facebook_button_background_color_focused_disabled"

java - Android 不支持 wifi p2p (wifidirect)

c# - Rfc2898DeriveBytes 的版本无关代码(在 .NET 4.0 上有 Dispose 但在 2.0 上没有)

c# - 哪些 C# 类对象获取非托管资源?有名单吗?

c# - 为什么 Bitmap 会导致规则 CA2000,而 Image 不会?

android - 从 Android 中的 LinearLayout 中删除 View 时出现异常

android - Eclipse Memory Analyzer 主饼图中的 Remainder 是多少?

android - LibGdx 冲突

java - 如何将 eclipse 中的 libgdx 项目从 Windows 传输到 Linux,反之亦然?

java - 为什么 json 不起作用?