情况1:资源相关的系统配置发生改变导致activity被杀死并重新创建
例子:横竖屏切换,默认activity会被销毁重新创建(系统配置发生改变:横竖屏)
- Acivity(横屏)---> onSaveInstanceState(Bundle) --->onPause--->onStop-->onDestory
- 在onSaveInstanceState之后就会重新创建Activity(竖屏):onCreate(Bundle)-->onRestoreInstanceState(Bundle) ;
- 系统会保存恢复视图结构:文本框的用户数据的数据,以及listview滚动位置等view相关的状态 ;
- Activity委托window去保存数据,window再委托它上面的顶级容器去保存数据.
- 顶级容器是viewGroup,一般可能就是DecorView,它通知自己的子元素保存数据.
- 这是一种委托思想:上层委托下层,父容器委托子元素去处理一件事.
- 这种思想在android中很常见:view的绘制过程,事件分发.数据恢复过程也是如此.
- 检验是否掌握该知识的问题:
- onSaveInstanceState,onRestoreIntanceState什么时候会被调用?或者onCreate中bundle什么情况下会有值?
- 横竖屏切换activity是如何进行数据保存以及恢复的?
情况2:资源内存不足导致低优先级Activity被杀死
数据保存与恢复和情况1相同.
- activity的优先级
- 前台activity: 正在和用户交互,优先级最高
- 可见但不是前台activity:如acitivity中弹出对话框,导致该activity可见但是位于后台,无法与用户交互(弹出对话框时,acitivity处于onPause中)
- 后台acivity:已经被暂停的activity.比如执行了onStop.优先级最低.
- 一个进程中没有四大组件,进程很快就会被杀死.
网友评论