为什么我的Android设备上LibGDX的resume()方法没有被调用?

3
我有多个运行安卓操作系统的设备。我正在构建一个LibGDX游戏,并且一直遇到这样的问题:每当用户按下主页按钮然后重新进入应用程序时,应用程序会重新启动。但我不想这样。最近我一直在与很多人交流,试图弄清楚为什么我的resume()方法在我的设备上无法运行。这是可以帮助我重新加载数据/资产并保持用户退出前的游戏状态的方法。
请告诉我:为什么我的设备不运行这个pause()方法,但其他很多人的设备却可以?
记录一下:我测试的两个设备是Galaxy S4手机和Nexus 7平板电脑。
2个回答

3
当Android应用程序不在前台时,您无法控制Android系统如何管理其生命周期。 因此,您需要处理所有可能的转换。 当应用程序在后台运行并且使用相对较大的资源时,设备有权终止您的应用程序。
在Libgdx中,仅在实际从暂停状态恢复(例如,长按主页键切换到其他应用程序,然后再次长按主页键回到应用程序)时才会调用resume方法。 其他框架(包括裸机Android)通常在首次启动时调用 resume,因此可能会导致混淆。(只需将首次启动工作放在create回调中即可)
有关Libgdx Android应用程序生命周期及如何重新创建各种情况的更多详细信息,请访问以下链接:http://bitiotic.com/blog/2013/05/23/libgdx-and-android-application-lifecycle/

2
为了补充P.T.的回答,我想再加上一个小技巧。LibGDX在第一次启动时不会自动调用resume方法,这一点并不直观。但是你可以很容易地自己模拟它。
public void create() {
    resume();
}

public void resume() {
    // this is the only place where you will initialize all assets and your screen/game
}

create()中不要做任何事情,只需将工作转发到resume()。这样你就不会有任何代码重复,并且你的初始化代码将始终运行。


虽然你的回答很好,告诉了我如何解决我的问题,但 P.T. 的回答更全面地回答了这个问题。不过还是谢谢你的回复! :) - hasherr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接