表 1. Activity 生命周期回调方法汇总表。
方法 | 描述 | 是否能事后终止? | 后接 | ||
---|---|---|---|---|---|
| 首次创建 Activity 时调用。 您应该在此方法中执行所有正常的静态设置— 创建视图、将数据绑定到列表等等。系统向此方法传递一个 Bundle 对象,其中包含 Activity 的上一状态,不过前提是捕获了该状态(请参阅后文的保存 Activity 状态)。 始终后接 | 否 | onStart() | ||
| 在 Activity 已停止并即将再次启动前调用。 始终后接 | 否 | onStart() | ||
| 在 Activity 即将对用户可见之前调用。 如果 Activity 转入前台,则后接 | 否 | onResume() 或 onStop() | ||
| 在 Activity 即将开始与用户进行交互之前调用。 此时,Activity 处于 Activity 堆栈的顶层,并具有用户输入焦点。 始终后接 | 否 | onPause() | ||
| 当系统即将开始继续另一个 Activity 时调用。 此方法通常用于确认对持久性数据的未保存更改、停止动画以及其他可能消耗 CPU 的内容,诸如此类。 它应该非常迅速地执行所需操作,因为它返回后,下一个 Activity 才能继续执行。 如果 Activity 返回前台,则后接 | 是 | onResume() 或 onStop() | ||
| Activity 对用户不再可见时调用。如果 Activity 被销毁,或另一个 Activity(一个现有 Activity 或新 Activity)继续执行并将其覆盖,就可能发生这种情况。 如果 Activity 恢复与用户的交互,则后接 | 是 | onRestart() 或 onDestroy() | ||
| 在 Activity 被销毁前调用。这是 Activity 将收到的最后调用。 当 Activity 结束(有人调用 Activity 上的 ),或系统为节省空间而暂时销毁该 Activity 实例时,可能会调用它。 您可以通过 方法区分这两种情形。 | 是 | 无 |
名为“是否能事后终止?”的列表示系统是否能在不执行另一行 Activity 代码的情况下,在方法返回后随时终止承载 Activity 的进程。 有三个方法带有“是”标记:(onPause()
、onStop()
和 onDestroy()
)。由于 onPause()
是这三个方法中的第一个,因此 Activity 创建后,onPause()
必定成为最后调用的方法,然后才能终止进程—如果系统在紧急情况下必须恢复内存,则可能不会调用 onStop()
和 onDestroy()
。因此,您应该使用 onPause()
向存储设备写入至关重要的持久性数据(例如用户编辑)。不过,您应该对 onPause()
调用期间必须保留的信息有所选择,因为该方法中的任何阻止过程都会妨碍向下一个 Activity 的转变并拖慢用户体验。