1.正常情况下的生命周期
- onCreate
- onStart - 可见、在后台
- onResume - 可见、在前台、可以交互
- onPause - 不能执行耗时操作,影响新的activity的显示
- onStop
- onDestroy
// 正常生命周期:从进入到退出
2019-12-12 09:46:05.249 9629-9629/com.example.learndemo D/LifeCycle: onCreate
2019-12-12 09:46:05.338 9629-9629/com.example.learndemo D/LifeCycle: onStart
2019-12-12 09:46:05.348 9629-9629/com.example.learndemo D/LifeCycle: onResume
2019-12-12 09:46:13.114 9629-9629/com.example.learndemo D/LifeCycle: onPause
2019-12-12 09:46:13.477 9629-9629/com.example.learndemo D/LifeCycle: onStop
2019-12-12 09:46:13.479 9629-9629/com.example.learndemo D/LifeCycle: onDestroy
// 正常生命周期:进入Activity
2019-12-12 09:46:44.322 9629-9629/com.example.learndemo D/LifeCycle: onCreate
2019-12-12 09:46:44.414 9629-9629/com.example.learndemo D/LifeCycle: onStart
2019-12-12 09:46:44.423 9629-9629/com.example.learndemo D/LifeCycle: onResume
// 灭屏 (模拟Activity暂停的场景)
2019-12-12 09:46:47.326 9629-9629/com.example.learndemo D/LifeCycle: onPause
2019-12-12 09:46:47.390 9629-9629/com.example.learndemo D/LifeCycle: onStop
// 亮屏,先执行onRestart (模拟Activity恢复的场景)
2019-12-12 09:46:52.839 9629-9629/com.example.learndemo D/LifeCycle: onRestart
2019-12-12 09:46:52.884 9629-9629/com.example.learndemo D/LifeCycle: onStart
2019-12-12 09:46:52.888 9629-9629/com.example.learndemo D/LifeCycle: onResume
2.onStart与onResume,二者有什么不同?
-
onStart 从可见的角度描述activity,此时没有在前台,不能交互操作
-
onResume 从是否在前台的角度描述,可以交互
3. 当前Activity为A,打开新的ActivityB,那么B的onResume与A的onPause的顺序是?
- onPause不要做重量级操作!!!因为onPause执行完,新Activity才会onResume
4.异常情况下的生命周期
- 横竖屏切换,默认情况下不做特殊处理会导致activity销毁并重建,当然也可以阻止系统重建activity
在onStop之前会调用onSaveInstanceState来保存activity的状态;
重建后会调用onRestoreInstanceState,通过上面保存的Bundle对象来做一些恢复操作,此处的Bundle不会为空。
上面的方式是异常情况才会调用,当然onCreate也可以拿到Bundle,但是要判空,因为正常情况下Bundle是null。
系统会帮忙做一些恢复操作,每个View都有上面两个方法。
- 如何阻止activity重建?
配置configChanges属性,则只会调用onConfigurationChanged方法。