回答这个问题 android save game state in onPause or onDestroy?
答案强调,提出问题的人应该将游戏状态保存在onPause中,因为onDestroy文档说明"有些情况下系统会在不调用此方法的情况下简单地终止活动的托管过程(或者其中的任何其他内容,因此它不应该被用来做那些在过程消失后留在身边的东西。"在这些情况下,我们如何确保调用onPause?是否可以控制在这些情况下调用哪些方法?似乎无法预测
答案 0 :(得分:2)
onPause将在您的活动每次离开屏幕,完成之前或者某些内容覆盖您的活动时调用,以防止用户与您的活动进行交互。
您无需担心未调用onPause。
有关详细信息,请查看s tarting and stopping activity training或Lifecycle Api Docs
答案 1 :(得分:2)
您应该在onSaveInstanceState()
中保存临时实例状态。此方法接收一个Bundle
参数,您可以使用该参数将状态写入。当您的应用重新启动时,Bundle
会发送到onCreate()
。
如果需要更永久地保存实例状态,请将其保存到数据库或SharedPreferences。根据{{3}},您应该使用onStop()
进行更多CPU密集型操作,而不是onPause()
。我认为您不必担心在正常使用情况下调用onPause()
。据我所知,它是有保证的。 (当然,总会有灾难性的失败,例如用户拔出设备的电池,但是你无能为力。)
答案 2 :(得分:0)
几乎可以肯定onPause()
将永远被调用。原因是“系统”极不可能积极地杀死一个活跃的(即可见的)Activity
。
为了释放资源,Android操作系统有效地保留了杀死休眠进程的权利 - 特别是那些长期运行但最近没有使用的进程。为了使Activity
(及其过程)符合此条件,您必须在某个时候将Activity
发送到后台状态,例如,按下HOME或启动另一个应用Activity
。您Activity
不再可见的简单事实意味着它将被暂停并且onPause()
将被调用。几乎可以肯定,Activity
将被停止并且onStop()
也将被调用。
你必须要记住的是Android已经存在了一段时间,早期的设备有100个MB测量的RAM,系统行为可能性和文档反映了这一点。更新的设备具有以GB(甚至10英镑)测量的RAM,因此除非用户真正将其设备推向其资源的限制,否则应用程序进程的积极清理变得不太可能。
答案 3 :(得分:-3)
您可以显示用户对话的对话框。当打开Dialog以询问用户是否要退出时,Activity肯定会调用onPause(),此时您可以编写游戏状态保存代码。最好在onPause()上编写代码,因为onDestroy()资源是由os释放的。