四大组件之Activity——生命周期

时间:2022-09-17 17:38:55

1、完整的Activity生命周期

  包括onCreate() -> onStart() -> onResume() -> onPause() -> onStop -> onDestroy()

四大组件之Activity——生命周期

  1. 各方法作用:其中onCreate()负责组件创建及初始化,onStart()负责组件可见,onResume()负责获得焦点,相对应的onPause()负责失去焦点,onStop()负责组件不可见,onDestroy()负责销毁组件
  2. 开启:开启页面默认使用onCreate() -> onStart() -> onResume(),即组件状态默认可见可交互
  3. 获取与失去焦点:当可见不可交互,如弹窗、锁屏时,只会调用onPause()方法,相应的关闭弹窗或解锁时,会调用onResume()方法,使组件重新获得焦点,可交互
  4. 可见于不可见:当状态变为不可交互也不可见时,则会依次调用onPause() -> onStop(),当组件重新被打开且可交互,依次调用onRestart() -> onStart() -> onResume()方法
  5. 销毁:在生命周期任何状态下销毁Activity,都会以最便捷的路径依次调用方法至onDestroy(),终结Activity的生命周期

2、横竖屏切换

  1. 切换横屏:
    1. onSaveInstanceState -> onPause -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume
  2. 切换竖屏:
    1. onSaveInstanceState -> onPause -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume -> onSaveInstanceState -> onPause -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume
  3. 切换屏要避免activity生命周期重启需要设置activity属性android:configChanges="orientation|keyboardHidden|screenSize"
    1. android4.0之前只用设置android:configChanges="orientation|keyboardHidden"就可,4.0之后需要添加一个screenSize

3、拓展:

3.1 onSaveInstanceState():保存实例状态

  调用情况:

  1. 当用户按下HOME键时。这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,因此系统会调用onSaveInstanceState(),让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则
  2. 长按HOME键,选择运行其他的程序时。
  3. 按下电源按键(关闭屏幕显示)时。
  4. 从activity A中启动一个新的activity时。
  5. 屏幕方向切换时,例如从竖屏切换到横屏时。

3.2 onRestoreInstanceState()恢复实例状态