参考:
《Android开发艺术探索》
1. Activity 的正常生命周期
完整的activity生命周期如下所示
生命周期的几点注意事项:
- Activity 第一次启动:onCreate->onStart->onResume。
- Activity 切换到后台( 用户打开新的 Activity 或者切换到桌面) ,onPause->onStop(如果新 Activity 采用了透明主题,则当前 Activity 不会回调 onstop)。
- Activity 从后台到前台,重新可见,onRestart->onStart->onResume。
- 用户退出 Activity,onPause->onStop->onDestroy。
- onStart 开始到 onStop 之前,Activity 可见。onResume 到 onPause 之前,Activity 可以接受用户交互。
- 在新 Activity 启动之前,栈顶的 Activity 需要先 onPause 后,新 Activity 才能启动。所以不能在 onPause 执行耗时操作。
- onstop 和 ondestroy 不一定回调,例如直接kill掉app的情况,因为上衣activity的 onstop 的触发是在下一个activity的onresume 之后的。
2. Activity 异常情况生命周期
例如 Activity 处于竖屏状态,如果突然旋转屏幕,由于系统配置发生了改变,Activity 就会被销毁并重新创建。在异常情况下系统会在 onStop 之前调用 onSaveInstanceState 来保存状态。Activity 重新创建后,会在 onStart 之后调用 onRestoreInstanceState 来恢复之前保存的数据。
保存数据的流程:
- Activity 被意外终止,调用 onSaveIntanceState 保存数据
- Activity 委托 Window,Window 委托它上面的顶级容器一个 ViewGroup( 可能是 DecorView) ,然后顶层容器在通知所有子元素来保存数据。
- 委托的方法是 View 的 dispatchSaveInstanceState/dispatchRestoreInstanceState 和 onSaveIntanceState / onRestoreInstanceState ,这里和View 的分发机制非常相像,这种与 View-ViewGroup 结构相契合的委托方式,形成了Android Vie