【发布时间】:2015-05-26 09:14:49
【问题描述】:
我在create 中加载我的资产并在pause 中处理它们。
但是当游戏关闭时,该过程可能会终止,也可能不会终止。即,它可能只是停止的活动而不是过程。在这种情况下,当游戏快速重新打开时,create 将不会被调用。只会调用resume。那么,我不应该在resume 中重新加载我的资产吗?
【问题讨论】:
我在create 中加载我的资产并在pause 中处理它们。
但是当游戏关闭时,该过程可能会终止,也可能不会终止。即,它可能只是停止的活动而不是过程。在这种情况下,当游戏快速重新打开时,create 将不会被调用。只会调用resume。那么,我不应该在resume 中重新加载我的资产吗?
【问题讨论】:
在 Android 中使用 Activity 的生命周期方法进行初始化是这样的:
这意味着,例如,我在 onCreate 中初始化的内容,我应该在 onDestroy 中删除。这三种方法都一样。
在你的情况下,我会在 onStart 中加载资产并将它们在 onStop 中处理。
另外,请注意 onDestroy 方法可能不会被调用。
【讨论】:
create 分配了一次资产。然后,如果我没有处理它,Android 会处理它。当我再次打开游戏时,它应该像以前一样正常工作,对吧?我错过了什么吗?如果我继续在渲染循环中分配资产或其他东西,我会理解 OOM。
如果我理解你的问题,如果你问为什么?按照 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
我为我的英语道歉,如果这个问题对你没有帮助,请告诉我并删除
【讨论】:
在dispose() 中处置您的资产,或者在您使用完资产并需要释放内存(例如切换到使用不同资产的新阶段)时。
游戏的dispose方法是在Activity的onPause()方法中调用的,但前提是Activity正在结束,所以你只在dispose()中dispose是安全的。如果应用程序进程保持打开状态,dispose() 已被调用,所以你很好。而此时,如果您的游戏重新打开,create() 将再次被调用,因此您无需担心在resume() 中重新加载。
如果 Android 出于某种原因强制退出您的游戏,那么无论如何都会清除所有内存,您无需担心泄漏。
您必须在dispose() 中处理的原因是用户退出您的游戏活动但应用程序进程未关闭的情况。如果用户再次启动游戏 Activity,之前实例中所有未处置的资产仍保留在内存中,现在已经泄漏。
【讨论】: