Activity的生命周期和启动模式

2017-07-25  本文已影响3人  伯纳乌大王

重点:生命周期和启动模式以及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(),可以做一些特殊处理。

上一篇下一篇

猜你喜欢

热点阅读