Android之activity全解释

一、生命周期

典型情况下:

activity_lifecycle.png

onStart和onStop是基于activity是否可见的角度来进行回调
onResume和onPause是基于activity是否位于前台的角度来进行回调
新启动一个activity,只有旧activity的onPause被回调后,才会启动新activity。
异常情况下:
异常情况下activity的重建过程

onSaveInstanceState调用是在onStop之前调用,与onPause之间没有先后关系,而onRestoreInstanceState,从时序上来说是在onStart之后调用。

关于异常情况下保存和恢复View的层次结构:
activity异常终止 ---> 调用onSaveInstanceState ---> 委托window保存 ---> 委托顶层容器ViewGroup(很可能是DecorView)保存 ---> 顶层容器再一一通知它的子元素来保存。

二、启动模式

standard(标准模式)
系统的默认模式,每启动一个activity,不管是否存在,都会重新创建实例。该模式的activity默认会进入到启动它的activity的所属的任务栈中。
singleTop(栈顶复用模式)
新启动的activity已位于任务栈的栈顶,不再创建新实例,而是会回调onNewIntent方法
singleTask(栈内复用模式)
新启动的activity已位于任务栈中,不再创建新实例,而是会回调onNewIntent方法。与此同时,该模式默认具有cleanTop的效果,会把要启动的activity的上面的activity全部出栈。
singleInstance(单实例模式)
加强型的singleTask模式,具有singleTask模式的所有特性。与此同时,具有该模式的activity只能单独的位于一个任务栈中。

特殊情况:假设目前有2个任务栈,前台任务栈的情况为AB,而后台任务栈的情况为CD,这里假设CD的启动模式均为singleTask。现在请求启动D,那么整个后台任务栈都会被切换到前台,这个时候整个后退列表变成了ABCD。当用户按back键的时候,列表中的Activity会一一出栈,如下图:

启动D的情况

如果不是请求的D而是请求的C,则如下图:
启动C的情况

启动模式配置可以AndroidMenifest.xml配置和代码配置。
xml配置无法为activity设定FLAG_ACTIVITY_CLEAR_TOP标识,
而代码配置则无法指定singleInstance模式。
另外,代码配置的优先级高于xml配置。

参考资料:http://blog.csdn.net/clandellen/article/details/79257489
《Android开发艺术探索》

你可能感兴趣的:(Android之activity全解释)