Android 我们如何保证将调用onPause?

Android 我们如何保证将调用onPause?,android,onpause,ondestroy,Android,Onpause,Ondestroy,这个问题怎么办 答案强调提出问题的人应该将游戏状态保存在onPause中,因为onDestroy文档中说“在某些情况下,系统只会在不调用此方法(或任何其他方法)的情况下终止活动的托管进程。”在这种情况下,我们如何确保调用onPause呢?是否可以控制在这些情况下调用什么方法?似乎不可预测您可以显示对话框供用户相应地操作。当对话框打开询问用户是否要退出时,活动肯定会调用onPause(),此时您可以编写游戏状态保存代码。最好在onPause()上编写代码,因为在onDestroy()上,操作系统

这个问题怎么办


答案强调提出问题的人应该将游戏状态保存在onPause中,因为onDestroy文档中说“在某些情况下,系统只会在不调用此方法(或任何其他方法)的情况下终止活动的托管进程。”在这种情况下,我们如何确保调用onPause呢?是否可以控制在这些情况下调用什么方法?似乎不可预测

您可以显示对话框供用户相应地操作。当对话框打开询问用户是否要退出时,活动肯定会调用onPause(),此时您可以编写游戏状态保存代码。最好在onPause()上编写代码,因为在onDestroy()上,操作系统会释放资源。

onPause将在每次活动离开屏幕时调用,在活动完成之前,或者如果活动上覆盖了某些内容,用户无法与活动进行交互

您不必担心onPause没有被调用


有关更多信息,请查看s或

您应该将临时实例状态保存在
onSaveInstanceState()
中。此方法接收一个
Bundle
参数,您可以使用该参数将状态写入。当应用程序重新启动时,
捆绑包
将被发送到
onCreate()


如果需要更永久地保存实例状态,请将其保存到数据库或SharedReferences。根据,您应该使用
onStop()
进行更多CPU密集型操作,而不是
onPause()
。我认为您不必担心在正常用例中调用
onPause()
。据我所知,这是有保证的。(当然,总是会出现灾难性的故障,例如用户拔出设备的电池,但您对此无能为力。)

几乎可以肯定的是,总是会调用
onPause()
。原因是“系统”极不可能主动杀死活动(即可见的)
活动

为了释放资源,Android操作系统有效地保留了杀死休眠进程的权利——特别是那些长期运行但最近未使用的进程。为了使您的
活动
(及其流程)符合此条件,您必须在某个时候将
活动
发送到后台状态,例如,按下HOME键或启动另一个应用程序的
活动
。您的
活动
不再可见这一简单事实意味着它将被暂停,并且
onPause()
将被调用。几乎可以肯定的是,
活动
将被停止,并且
onStop()
也将被调用

你必须记住的是,Android已经存在了一段时间,早期的设备的RAM测量值为100MB,系统行为的可能性和文档反映了这一点。最近的设备的RAM以GB为单位(甚至是10秒的GB),因此,除非用户真的将设备推向其资源的极限,否则对应用程序进程进行积极清理的可能性就会降低。

这一点在中有说明。