Activity全知识
一、Activity的启动
1. Activity的方法执行顺序
-
启动Activity1: onCreate -> onStart -> onResume -
退到后台/熄屏 onPause -> onSaveInstanceState -> onStop -
亮屏/重新进入应用 onRestart -> onStart -> onResume -
销毁页面 onPause -> onStop -> onDestroy -
Activity1跳转到Activity2: 启动Activity1 1onCreate -> 1onStart -> 1onResume 继续从Activity1中启动到Activity2 -> 1onPause -> 2onCreate -> 2onStart -> 2onResume -> 1onSaveInstanceState -> 1onStop 继续退出Activity2 -> 2onPause -> 1onStart -> 1onResume -> 2onStop -> 2onDestroy
注意: onStop是在Activity不可见的时候执行, onResume是可见的时候立即执行, 所以从Activity1跳转到Activity2时, 先执行Activity2的onResume, 再执行Activity1的onStop
二、方法详解
1. onSaveInstanceState
当某个activity变得”容易”被系统销毁时,该activity的onSaveInstanceState()就会被执行
具体场景:
- 按下HOME键
- 进入最近任务, 进入其他应用
- 进按下电源键关闭屏幕时
- 进入新的Activity
- 切换屏幕方向
注意:
- 只保存与ui相关的状态数据(组件必须有id才能保存)
- 只能保存瞬态数据, 如ui状态, 成员变量的值等, 持久化数据的保存,如数据库文件等, 要在onPause中保存
2. onRestoreInstanceState
在onStart() 和 onPostCreate(Bundle)之间调用;
并不与onSaveInstanceState成对出现, 如部分Activity并没有被销毁的情况下, onSaveInstanceState可能调用了, 但是onRestoreInstanceState并没有被调用
3. onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?)
persistentState表示持久化保存, 如在手机重启等情况也可以恢复, 需要在Manifest中的Activity添加属性android:persistableMode="persistAcrossReboots" 类似的还是onSaveInstanceState, onRestoreInstanceState
其他(不常用):
- onAttachedToWindow
在onResume之后执行, 只执行一次, 执行之后还是不能直接获取到view的尺寸 - onDetachedFromWindow
在onDestroy之后执行 - onPostCreate
在onCreate之后执行 - onPostResume
在onResume之后执行
|