《Android开发艺术探索》要点摘录

  1. 第1章 Activity 的生命周期和启动模式

第1章 Activity 的生命周期和启动模式

1、将 Activity 的生命周期分为两部分内容,一部分是典型情况下的生命周期,另一部分是异常情况下的生命周期。所谓典型情况下的生命周期,是指在有用户参与的情况下,Activity 所经过的生命周期的改变;而异常情况下的生命周期是指 Activity 被系统回收或者由于当前设备的 Configuration 发生改变从而导致 Activity 被销毁重建。(1页)
2、在正常情况下,Activity 会经历如下生命周期:(2页)

  • onCreate:表示 Activity 正在被创建,这是生命周期的第一个方法。
  • onRestart:表示 Activity 正在重新启动。一般情况下,当当前 Activity 从不可见重新变为可见状态时,onRestart 就会被调用。
  • onStart:表示 Activity 正在被启动,即将开始,这时 Activity 已经可见了,但是还没有出现在前台,还无法和用户交互。
  • onResume:表示 Activity 已经可见了,并且出现在前台并开始活动。onStart 和 onResume 都表示 Activity 已经可见,但是 onStart 的时候 Activity 还在后台,onResume 的时候 Activity 才显示到前台。
  • onPause:表示 Activity 正在停止,正常情况下,紧接着 onStop 就会被调用。在特殊情况下,如果这个时候快速地再回到当前 Activity,那么 onResume 会被调用。
  • onStop:表示 Activity 即将停止,可以做一些稍微重量级的回收工作。
  • onDestroy:表示 Activity 即将被销毁,这是 Activity 生命周期中的最后一个回调,在这里,我们可以做一些回收工作和最终的资源释放。

3、Activity 生命周期的具体情况:(3页)

  • 针对一个特定的 Activity,第一次启动,回调如下:onCreate → onStart → onResume。
  • 当用户打开新的 Activity 或者切换到桌面的时候,回调如下:onPause → onStop。如果新 Activity 采用了透明主题,那么当前 Activity 不会回调 onStop。
  • 当用户再次回到原 Activity 时,回调如下:onRestart → onStart → onResume。
  • 当用户按 back 键回退时,回调如下:onPause → onStop → onDestroy。

4、从整个生命周期来说,onCreate 和 onDestroy 是配对的,分别标识着 Activity 的创建和销毁,并且只可能有一次调用。从 Activity 是否可见来说,onStart 和 onStop 是配对的,随着用户的操作或者设备屏幕的点亮和熄灭,这两个方法可能被调用多次;从 Activity 是否在前台来说,onResume 和 onPause 是配对的,随着用户操作或者设备屏幕的点亮和熄灭,这两个方法可能被调用多次。(4页)
5、当前 Activity 为 A,如果这时用户打开一个新 Activity B,那么 A 的 onPause 先执行,然后 B 再启动。(4页)
6、对于 Android 运行的基本机制在不同 Android 版本上具有延续性。(8页)
7、在默认情况下,如果我们的 Activity 不做特殊处理,那么当系统配置发生改变后,Activity 就会被销毁并重新创建。当系统配置发生改变后,Activity 会被销毁,其 onPause、onStop、onDestroy 均会被调用,同时由于 Activity 是在异常情况下终止的,系统会调用 onSaveInstanceState 来保存当前 Activity 的状态。这个方法的调用时机是在 onStop 之前,它和 onPause 没有既定的时序关系,它既可能在 onPause 之前调用,也可能在 onPause 之后调用。需要强调的一点是,这个方法只会出现在 Activity 被异常终止的情况下,正常情况下系统不会回调这个方法。当 Activity 被重新创建后,系统会调用 onRestoreInstanceState,并且把 Activity 销毁时 onSaveInstanceState 方法所保存的 Bundle 对象作为参数同时传递给 onRestoreInstanceState 和 onCreate 方法。因此,我们可以通过 onRestoreInstanceState 和 onCreate 方法来判断 Activity 是否被重建了,如果被重建了,那么我们就可以取出之前保存的数据并恢复,从时序上来说,onRestoreInstanceState 的调用时机在 onStart 之后。(9页)
8、在 onSaveInstanceState 和 onRestoreInstanceState 方法中,系统自动为我们做了一定的恢复工作。当 Activity 在异常情况下需要重新创建时,系统会默认为我们保存当前 Activity 的视图结构,并且在 Activity 重启后为我们恢复这些数据。关于保存和恢复 View 层次结构,系统的工作流程是这样的:首先 Activity 被意外终止时,Activity 会调用 onSaveInstanceState 去保存数据,然后 Activity 会委托 Window 去保存数据,接着 Window 再委托它上面的顶级容器去保存数据。顶层容器是一个 ViewGroup,一般来说它很可能是 DecorView。最后顶层容器再去一一通知它的子元素来保存数据,这样整个数据保存过程就完成了。(10页)

持续更新中…