1、首次启动
onCreate-> onStart -> onResume
2、当前页面退到后台(包含从最近应用中选择运行其他的程序、用户按下HOME键、按下电源按键即关闭屏幕显示、从当前activity启动一个新的activity时)
onPause -> onStop -> onSaveInstanceState
3、HOME键后再次打开应用
onNewIntent ->onRestart ->onStart -> onResume
3、电源键后再次打开应用
onRestart ->onStart -> onResume
4、屏幕切换
onPause-> onStop-> onSaveInstanceState -> onDestroy -> onCreate ->onStart-> onRestoreInstanceState->onResume
5、按返回退出应用
onPause->onStop ->onDestroy
一、关于onSaveInstanceState(),onRestoreInstanceState的调用时机:
onSaveInstanceState(Bundle outState)会在以下情况被调用:
1、当前页面退到后台(包含从最近应用中选择运行其他的程序、用户按下HOME键、按下电源按键即关闭屏幕显示、从当前activity启动一个新的activity时)。
2、屏幕方向切换时(无论竖屏切横屏还是横屏切竖屏都会调用)。
onRestoreInstanceState(Bundle outState)会在以下情况被调用:
onRestoreInstanceState(Bundle savedInstanceState)只有在activity确实是被系统回收,重新创建activity的情况下才会被调用。
1、屏幕方向切换时,activity生命周期如下onPause -> onStop -> onSaveInstanceState-> onDestroy -> onCreate -> onStart -> onRestoreInstanceState-> onResume
2、按HOME键返回桌面,在后台被回收,又马上点击应用图标回到原来页面时不会被回收onStart -> onRestoreInstanceState -> onResume
源码:
系统会调用ActivityThread的performStopActivity方法中调用用onSaveInstanceState, 将状态保存在mActivities中,mActivities维护了一个Activity的信息表,当Activity重启时候,会从mActivities中查询到对应的ActivityClientRecord。如果有信息,则调用Activity的onResoreInstanceState方法,在ActivityThread的performLaunchActivity方法中,统会判断ActivityClientRecord对象的state是否为空不为空则通过Activity的onSaveInstanceState获取其UI状态信息,通过这些信息传递给Activity的onCreate方法。
二、onStart 和 onResume、onPause 和 onStop 的区别
onStart 和 onResume 从 Activity 可见可交互区分onStart 用户可以看到部分activity但不能与它交互 onResume()可以获得activity的焦点,能够与用户交互onStop 和 onPause 从 Activity 是否位于前台,是否有焦点区分onPause表示当前页面失去焦点。onStop表示当前页面不可见。dialog的主题页面,这个时候,打开着一个页面,就只会执行onPause,而不会执行onStop。