android应用开发(23)---处理Activity状态更改

处理活动状态更改

不同的事件,一些用户触发和一些系统触发,可能导致Activity从一个状态转换到另一个状态。本文档描述了发生此类转换的一些常见情况以及如何处理这些转换。

有关活动状态的更多信息,请参阅 了解活动生命周期要了解ViewModel 该类如何帮助您管理活动生命周期,请参阅了解ViewModel类

发生配置更改

有许多事件可以触发配置更改。也许最突出的例子是纵向和横向取向之间的变化。其他可能导致配置更改的情况包括对语言或输入设备的更改。

当发生配置更改时,该活动将被销毁并重新创建。原来的活动实例将有 onPause(), onStop()和 onDestroy()回调触发。活动的一个新实例将被创建并拥有 , 以及回调触发。 onCreate()onStart()onResume()

使用ViewModels,onSaveInstanceState()方法和/或持久本地存储的组合来跨配置更改保留活动的UI状态。决定如何组合这些选项取决于UI数据的复杂性,应用程序的使用情况以及考虑检索速度与内存使用情况的关系。有关保存活动UI状态的更多信息,请参阅保存UI状态

处理多窗口案件

当应用程序进入Android 7.0(API级别24)及更高版本可用的多窗口模式时,系统会通知当前正在运行的配置更改活动,从而执行上述生命周期转换。如果应用程序已处于多窗口模式获取调整大小,也会发生此行为。您的活动可以处理配置更改本身,也可以让系统销毁活动并使用新维度重新创建它。

有关多窗口生命周期的更多信息,请参阅多窗口支持 页面多窗口生命周期部分 

在多窗口模式下,虽然有两个应用程序对用户可见,但只有与用户交互的应用程序位于前台并具有焦点。该活动处于恢复状态,而另一个窗口中的应用处于暂停状态。

当用户从应用程序A切换到应用程序B时,系统会调用 onPause()应用程序A和onResume()应用程序B.每次用户在应用程序之间切换时,都会在这两种方法之间切换。

有关多窗口的更多详细信息,请参阅 多窗口支持

活动或对话框出现在前台

如果前景中出现新的活动或对话框,关注并部分覆盖正在进行的活动,则所涵盖的活动失去焦点并进入暂停状态。然后,系统调用 onResume()它。

当覆盖的活动返回到前景并重新获得焦点时,它会调用onResume()

如果前景中出现新的活动或对话框,关注焦点并完全覆盖正在进行的活动,则覆盖的活动失去焦点并进入停止状态。然后系统迅速地接通onPause()和 呼叫onStop()

当覆盖活动的同一实例回来到前台时,系统调用onRestart(), onStart()以及 onResume()对活动。如果它是涉及后台的被覆盖活动的新实例,则系统不会调用onRestart(),只调用 onStart()和 onResume()

注意:当用户点击概览或主页按钮时,系统的行为就好像当前活动已被完全覆盖。

用户点击返回按钮

如果活动是在前台,而用户点击后退按钮,该活动通过转换 onPause(), onStop()和 onDestroy() 回调。除了被销毁之外,该活动也从后退栈中移除。

需要注意的是,默认情况下, onSaveInstanceState() 回调在这种情况下不会触发。此行为基于假设用户点击后退按钮而不期望返回到活动的同一实例。但是,您可以重写该 onBackPressed()方法来实现一些自定义行为,例如“确认 - 退出”对话框。

如果您重写该onBackPressed() 方法,我们仍强烈建议您super.onBackPressed()从重写的方法调用 否则,后退按钮的行为可能会对用户产生震动。

系统杀死应用程序进程

如果应用程序处于后台并且系统需要释放前台应用程序的额外内存,则系统可以终止后台应用程序以释放更多内存。要详细了解系统如何决定销毁哪些进程,请阅读 活动状态并从内存和 进程和应用程序生命周期中弹出

要了解如何在系统终止您的应用程序进程时保存活动UI状态,请参阅 保存和恢复活动状态

你可能感兴趣的:(android,应用开发)