异常情况下的Activity生命周期----《android艺术探索》读书笔记(2)

情况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.优先级最低.
  • 一个进程中没有四大组件,进程很快就会被杀死.

你可能感兴趣的:(异常情况下的Activity生命周期----《android艺术探索》读书笔记(2))