Activity的生命周期和启动模式
重点:生命周期和启动模式以及IntentFilter的匹配规则分析。
正常情况下Activity的生命周期分析
onCreate: Activity正在被创建,一些初始化的操作,如setContentView去加载界面布局资源、初始化Activity里面所需数据等。
onRestart: Activity正在重新启动。当前Activity从不可见状态变为可见状态时,onRestart就会被调用。
onStart: Activity正在被启动,这时Activty已经可见了,但没有出现在前台,无法和用户交互。
onResume: Activity已经可见了,并且出现在前台开始活动。
onPause: Activity正在停止,可做一些存储数据、停止动画的操作,但不能太耗时。结束之后,新的Activity的onResume才会执行。
onStop: Activity即将停止,可做一些稍微重量级的回收工作,亦不能太耗时。
onDestory: Activity即将被销毁,Activity的最后一个回调,可做一些回收工作和最终资源的释放。
问题探究
onCreate和onDextory配对 -------------->标识着Activity的创建和销毁,并且可能只有一次调用
onStart和onStop配对 -------------->标识Activity的可见,可能调用多次
onResume和onPause配对 ------------->标识Activity在前台,可能调用多次
onStart和onStop与onResume和onPause只有意义的区分,从是否可见和是否显示在前台来回调的,在实际使用中没有其他明显区别
异常情况下Activity的生命周期分析
Activity ------意外情况---->onSaveInstanceState------->onDestory
重新创建后
Activity------->onCreate---------->onRestoreInstanceState
Aciivity异常结束后,系统会调用onSaveInstanceState保存当前Activity状态(onStop之前),实际上就是一个Bundle对象。Activity重新创建之后,系统调用onRestoreInstanceState,并把保存的bundle对象传递给它和onCreate。因此,可以通过onRestoreInstanceState和onCreate判断当前Activity是否被创建了,则可以取出bundle并恢复,onRestoreInstanceState在onStart之后调用。
其次,系统会自动做一些回复工作,默认保存当前Activity的视图结构,并在activity重启之后进行恢复。View层次结构的工作流程:
Activity被意外终止,Activity调用onSaveInstanceState去保存数据,委托Window去保存数据,接着Window委托上面的顶级容器保存数据(ViewGroup),一般很可能是DecorView,顶层容器通知它的子元素保存数据,保存完毕。这是一种典型的委托思想,上层委托下层,父容器委托子元素。
如果不想让异常的Activity启动则可以指定configChanges属性,orientation,则就不会调用onSaveInstanceState和onRestoreInstanceState来储存和恢复数据,而取而代之的调用了Activity的onConfigurationChanged(),可以做一些特殊处理。