在开发示例Android应用程序时,我构建了两个活动1)活动1 2)活动2
现在,活动2是前景活动,而活动1是背景活动.现在用户按Home键.应用程序(即两个活动)消失了.现在我们重新启动应用程序,我们将活动1视为前台活动.我的问题是:
1)当按下主页键时,平台是否保留任何历史记录条目?2)我们如何将用户带到重新启动应用程序的上次启动活动?
在过去的几个月里,我一直在开发一个多功能的实时游戏引擎,我已经学到了很多,但在应用程序生命周期方面我仍然觉得很天真.具体来说,我正在尝试实现一个Activity,它可以被用户拖入后台,然后正确恢复.
我当前的架构是这样的:我有一个XML菜单启动器活动,可以使用intent创建实时游戏活动.此游戏活动中的相关数据通过静态数据结构和变量引用.Game活动在我的SurfaceView对象的onSurfaceCreate()回调中创建工作线程.
当用户按下后退按钮时,活动将被销毁,并且它们将被发送回启动器活动中的XML菜单.很好,现在很好.当用户按下主页按钮时,活动将被发送到后台.太好了.当用户尝试在游戏活动中找回回路后,我的问题就出现了.当用户触摸启动器图标时,游戏将被销毁并重新启动菜单.此外,当用户通过任务管理器恢复游戏时,onSurfaceCreate()回调将触发并启动工作线程,但游戏将被冻结.
所以,我有两个问题.首先,如何通过启动器图标恢复活动,而不是重新启动游戏?其次,当我恢复活动时,在保持游戏数据的同时重启我的工作线程需要采取什么行动?
谢谢!
编辑:根据要求,我在下面包括一些代码.我的onSurfaceCreate有点复杂,它向另一个线程发送消息,然后另一个线程实现回调.我已经确认在恢复游戏活动时会触发此实现功能.
protected void surfaceCreate()
{
Log.e(TAG, "surfaceCreate");
Thread gameThread = createGameThread();
gameThread.start();
}
protected final void onResume()
{
super.onResume();
resume();
}
protected final void onPause()
{
super.onPause();
pause();
}
Run Code Online (Sandbox Code Playgroud)
这些神秘的pause()和resume()方法只是简单地设置一个布尔变量来阻止某些游戏逻辑被执行,它们不会阻碍工作线程,这应该继续循环.
编辑:谢谢穆罕默德解决我的第一个(虽然更小)的问题.事实证明,当未通过USB连接到IDE时,启动器图标的行为会有所不同.第二个问题仍未得到解决.
编辑:一切正常!第二个问题是我的代码特有的问题,我为此道歉.我希望这个问题对那些处理启动器和IDE的人来说仍然有用.