Learn && Live
虚度年华浮萍于世,勤学善思至死不渝
前言
Hey,欢迎阅读Connor学Android系列,这个系列记录了我的Android原理知识学习、复盘过程,欢迎各位大佬阅读斧正!原创不易,转载请注明出处:http://t.csdn.cn/1CPfU,话不多说我们马上开始!
1.生命周期分析
onCreate:Activity正在被创建,可进行初始化工作,如setContentView加载界面布局资源、初始化Activity所需数据等
onRestart:Activity正在被重新创建,即由不可见状态 → 可见状态
onStart:Activity正在被启动。可见,但没有出现在前台,不可交互
onResume:Activity可见可交互
onPause:Activity正在停止,可能调用的操作:①按Home键;②打开一个新的Activity等。可以做一些存储数据、停止动画等非耗时的工作,因为onPause执行完新Activity才会执行onResume,耗时的工作会影响新Activity的显示
onStop:Activity即将停止,可进行重量级回收工作,但同样不能太耗时
onDestroy:Activity即将销毁,可进行回收工作和最终的资源释放
此外图中还有两个与Activity生命周期切换相关的回调函数,下面一并介绍
onSaveInstanceState:用于储存当前Activity状态
(1)调用时机:意外情况导致的onPause调用,此处意外情况如:Home、长按Home或按下菜单键、熄屏、A启动B时A调用、默认情况下的横竖屏切换,而人为情况下,如Back、finish()不会调用。
(2)注意:onPause、onSaveInstanceState回调顺序不定
onRestoreInstanceState:用于恢复Activity状态,常见于系统配置发生变化时,后面会详细介绍
2.生命周期切换实例
1.A → B
A.onSaveInstanceState → A.onPause → B.onCreate → B.onStart → B.onResume → A.onStop
或
A.onPause → A.onSaveInstanceState → B.onCreate → B.onStart → B.onResume → A.onStop
2.Back
B.onSaveInstanceState → B.onPause → A.onRestart → A.onStart → A.onResume → B.onStop → B.onDestroy
3.横竖屏切换(系统配置发生变化)
(1)重新创建Activity(默认情况)
onPause → onSaveInstanceState → onStop → onDestroy → onCreate → onRestoreInstanceState → onStart → onResume
注意:重建时,系统会默认保存当前Activity的视图结构,在重启时恢复,如文本框内容、ListView滚动位置等(对应组件代码的onSaveInstanceState方法和onRestoreInstanceState方法中的具体实现),我们也可以在Activity的onSaveInstanceState方法中保存想要保存的内容。
关于保存和恢复View层次结构,系统的工作流程如下:(1)Activity被意外终止,调用onSaveInstanceState保存数据;(2)Activity委托Window保存数据;(3)Window委托它上面的顶层容器保存数据,顶层容器是一个ViewGroup,一般来说很可能是DecorView;(4)顶层容器逐一通知它的子元素来保存数据。
(2)不重建
设置Activity的android:configChanges=“orientation|keyboardHidden”,横竖屏切换时不会重新创建Activity,而是回调onConfigurationChanged方法
4.内存不足导致低优先级的Activity被杀死
当系统内存不足时,系统就会按照上述优先级杀死目标Activity所在进程