【问题标题】:When and why should I load and dispose assets?我应该何时以及为什么要加载和处置资产?
【发布时间】:2015-05-26 09:14:49
【问题描述】:

我在create 中加载我的资产并在pause 中处理它们。

但是当游戏关闭时,该过程可能会终止,也可能不会终止。即,它可能只是停止的活动而不是过程。在这种情况下,当游戏快速重新打开时,create 将不会被调用。只会调用resume。那么,我不应该在resume 中重新加载我的资产吗?

【问题讨论】:

    标签: android libgdx


    【解决方案1】:

    在 Android 中使用 Activity 的生命周期方法进行初始化是这样的:

    • onCreate() -> onDestroy()
    • onStart() -> onStop()
    • onResume() -> onPause()

    这意味着,例如,我在 onCreate 中初始化的内容,我应该在 onDestroy 中删除。这三种方法都一样。

    在你的情况下,我会在 onStart 中加载资产并将它们在 onStop 中处理。

    另外,请注意 onDestroy 方法可能不会被调用。

    【讨论】:

    • 但这并不能回答问题。当Android进程被杀时自动释放Assets,为什么要dispose呢?
    • 那就不要丢弃它们。但是,您可能会遇到 OutOfMemory 异常,这实际上会导致您的进程被杀死。
    • 另外,问题是“我应该什么时候加载和处置资产?”,我相信我已经回答了这个确切的问题
    • 抱歉这个问题,我稍微编辑了一下。为什么它会给我一个OOM异常?这不像我在游戏中不断分配资产。为什么它会耗尽内存。我在create 分配了一次资产。然后,如果我没有处理它,Android 会处理它。当我再次打开游戏时,它应该像以前一样正常工作,对吧?我错过了什么吗?如果我继续在渲染循环中分配资产或其他东西,我会理解 OOM。
    • 我认为这里的混乱是因为问题是关于 Libgdx,它抽象了 Android 特定的生命周期的东西。问题具体是关于何时在 Libgdx 生命周期中处置资产。
    【解决方案2】:

    如果我理解你的问题,如果你问为什么?按照 dispose-law,通常 android 负责释放资源,lidGDX。

    在某些情况下,它会创建垃圾收集器、JVM 无法访问的对象,这些对象是从应用程序的本机端创建的,而 GC 无法删除它们,因此您必须调用有 dispose 并不是所有的对象都需要使用 dipose,这里你可以看到一个列表:

    http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/utils/Disposable.html

    这个答案也可能对你有所帮助:

    Game crash if interrupted while Splash Screen is on - LIBGDX

    我为我的英语道歉,如果这个问题对你没有帮助,请告诉我并删除

    【讨论】:

    • 感谢您的回答。但是我不太明白你的第一句话。我的问题是,当 Android 会在游戏退出后进行处理时,为什么我需要处理对象?这不是游戏运行时持续内存泄漏的问题。这是一次性的事情。如果我忘记释放资产内存,Android 会这样做。下次打开游戏,一切都好新鲜。
    【解决方案3】:

    dispose() 中处置您的资产,或者在您使用完资产并需要释放内存(例如切换到使用不同资产的新阶段)时。

    游戏的dispose方法是在Activity的onPause()方法中调用的,但前提是Activity正在结束,所以你只在dispose()中dispose是安全的。如果应用程序进程保持打开状态,dispose() 已被调用,所以你很好。而此时,如果您的游戏重新打开,create() 将再次被调用,因此您无需担心在resume() 中重新加载。

    如果 Android 出于某种原因强制退出您的游戏,那么无论如何都会清除所有内存,您无需担心泄漏。

    您必须在dispose() 中处理的原因是用户退出您的游戏活动但应用程序进程未关闭的情况。如果用户再次启动游戏 Activity,之前实例中所有未处置的资产仍保留在内存中,现在已经泄漏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      相关资源
      最近更新 更多