[android] Activity 的生命周期 以及 横屏竖屏切换时 Activity 的状态变化 生命周期
Android 系统在Activity 生命周期中加入一些钩子,我们可以在这些系统预留的钩子中做一些事情。
例举了 7 个常用的钩子:
protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onResume()
protected void onPause()
protected void onStop()
protected void onRestart()
protected void onDestroy()

简要说明:
onCreate(Bundle savedInstanceState):创建activity时调用。设置在该方法中,还以Bundle中可以提出用于创建该 Activity 所需的信息。
onStart():activity变为在屏幕上对用户可见时,即获得焦点时,会调用。
onResume():activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。
onPause():activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的。。
onStop():activity被停止并转为不可见阶段及后续的生命周期事件时,即失去焦点时调用。
onRestart():重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。
onDestroy():activity被完全从系统内存中移除时调用,该方法被调用可能是因为有人直接调用 finish()方法 或者系统决定停止该活动以释放资源。

横竖屏切换

1 切换到横屏
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume

2 切换到竖屏,销毁了两次
onSaveInstanceState
onPause
onStop
onDestroy onCreate
onStart
onRestoreInstanceState
onResume
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume

3 修改AndroidManifest.xml,把该Activity添加 android:configChanges="orientation",切横屏,只销毁一次。

onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume

4 再切回竖屏,发现不会再打印相同信息,但多打印了一行onConfigChanged

onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
onConfigurationChanged

5 更改 android:configChanges="orientation" 改成 android:configChanges="orientation|keyboardHidden",切横屏,就只打印onConfigChanged

onConfigurationChanged

6 切回竖屏

onConfigurationChanged
onConfigurationChanged

总结:

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法





更多相关文章

  1. Android(安卓)display架构分析四-msm_fb.c 函数和数据结构介绍
  2. android不公开的面试题偶!!!
  3. ffmpeg入门教程之Android使用FFmpeg so(封装格式转换)
  4. SurfaceFlinger启动过程分析(一)
  5. Android(安卓)N Ethernet新IP获取机制—IpManager
  6. Android(安卓)WebView Java和JavaScript的交互(一)
  7. Android(安卓)Context 相关
  8. Android游戏框架Libgdx使用入门
  9. ContentProvider何时创建?SQLiteDatabase方法何时执行?

随机推荐

  1. 10行Python代码自动清理电脑内重复文件,解
  2. NumPy学的还不错?来试试这20题!
  3. 这样用Excel动态交互图表,还要什么前端?
  4. 扫雷的部分实现
  5. 假如生活欺骗了你:可以用统计模型来做决策
  6. 疫情下普通人的生活写照
  7. 原理+代码|深入浅出Python随机森林预测实
  8. 动态图表交互揭秘:制作选择器的奥秘
  9. 探索另类圆环图的做法
  10. 图表操作的几个技巧