第一章:Activity 的生命周期和启动模式
1.1 Activity的生命周期
- onCreate - 构建Activity
- onRestart - Activity在重启,一般来说Activity恢复时在onStop后执行
- onStart - Activity开始启动,这时Activity已经可见,但是仍然处于后台状态,所以尽管处于可见状态,用户也看不见,事件也无法响应。
- onResume - Activity已经启动,并且处于前台状态.用户可见,事件可响应。
- onPause - Activity正在执行停止 一般情况紧接着会有onStop。注意只有当前onPause函数执行,新Activity才会执行onResume,所以切记不可做耗时处理。
- onStop - Activity即将停止 ,同样不能太耗时。
onDestroy - Activity最后一个生命函数,可以做资源回收。
总结一下
- onStart 和 onStop 是一对的他们代表了Activity是否可见
- onResume 和 onPause 是一对他们表示了Activiry是否在前台/后台
由上面两个总结我们可以得知两种特别的情况:
- 如果新的Activity主题是透明的,那么可以知道旧Activity仍然会显示,所以旧Activity的onStop是不会执行的。
- 只有旧Activity退到后台,新Activity才能到前台来,也就是旧的onPause执行完新的才会执行onResume
异常情况
当系统配置发生改变或者内存不足时候,系统会异常杀死Activity,每当这时系统都会调用onSaveInstanceState 和 onRestoreInstanceState 这两个函数- onSaveInsatanceState 函数会保存当前Activity的数据,它会在onStop之前调用
- onRestoreInstanceState在onStart之后调用
很多人就会问,系统咋知道我要保存啥数据啊,那么多界面元素,它都知道吗?感觉难以置信!这里我们可以跟一下源码一起来看看。如果不想看代码,可以直接点击跳转查看结论
Activity.java
protected void onSaveInstanceState(Bundle outState) { outState.putBundle(WINDOW_HIERARCHY_TAG, mWindow.saveHierarchyState()); ... }
从第二行可以看到,Activity委托了Window去保存,
结论