Activity 生命周期全解

1,365 阅读1分钟

1.正常情况下

生命周期如图:

  • onCreate()  表示Activity正在被创建,  参数为onSaveInstanceState保存的状态信息
  • onRestart()  Activity正在重新启动
  • onStart()   activity变为在屏幕上对用户可见时调用
  • onResume()  开始与用户交互时调用
  •         onWindowFocusChanged  activity获取到焦点 可以进行动画等UI操作
  • onPause()   Activity正在停止,失去焦点
  •         onWindowFocusChanged  activity失去焦点
  • onStop()   Activity即将停止,且处于不可见状态,
  • 如果内存紧张,不会触发 onStop,  所以保存状态信息是应该在onPause时做
  • onDestory()  Activity正在被销毁

特殊情况:

1.屏幕旋转

onPause->onSaveInstanceState->   onStop-> onDestory

-> onCreate-> onStart()-> onRestoreInstanceState()->onResume()

避免重建activity:

AndroidManifest文件中的对应Activity中配置android:configChanges="keyboardHidden|orientation|screenSize",

设置之后旋转屏幕:onConfigurationChanged()被回调

2.上层被透明(Translucent )Theme 的Activity或者DialogActiivty 或者Dialog覆盖

onPause->恢复的时候 onResume 

3.onSaveInstanceState调用时机

  1. 当用户按下HOME键时。
  2. 长按HOME键,选择运行其他的程序时(即进入后台管理界面)。 
  3. 按下电源按键(关闭屏幕显示)时。 
  4. 从activity A中启动一个新的activity时。
  5. 屏幕方向切换时,例如从竖屏切换到横屏时。

总结来说就是在 未经用户主动操作 (finish()/back)而 有可能 导致Activity 销毁(亦可理解为Activity异常的销毁)的情况下, 系统会调用该方法以便保存状态在将来恢复 。

4. onRestoreInstanceState什么时机被调用?

onRestoreInstanceState(Bundle savedInstanceState)只有在activity确实是被系统回收,重新创建activity的情况下才会被调用。

5.非Standard 启动方式的生命周期 

详见:juejin.cn/post/705086…

不管是singleTop singleTask singleInstance,

如果是相邻复用:onPause() onNewIntent()和onResume()  

如果是相隔复用:onNewIntent(), onStart(), onResume()