Activity典型情况下的的生命周期分析
Activity
- onCreate:表示activity正在启动
- onRestart: 表示activity正在重新启动
- onStart:表示正在被启动,已经可见,但是未出现在前台,无法和用户交互
- onResume:表示activity已经可见,onStart的时候activity还在后台,onResume才显示到前台
- onPause:表示activity正在停止,正常情况下紧接着onStop就会调用。在特殊情况下,如果这个时候快速地再回到当前activity,那么onResume会被调用,保持所有状态信息和成员变量。
- onStop:表示activity即将停止,可以做一些稍微重量级的回收工作,但同样不能太耗时,依然保持所有状态信息和成员变量。
- onDestroy:表示activity即将被销毁,是activity生命周期中的最后一个回调,可以做一些回收工作和最终的资源释放
- onStart和onStop是从activity是否可见这个角度来回调的
- onResume和onPause是从activity是否位于前台这个角度来回调的
- 假设当前Activity为A,这时当用户打开一个新ActivityB,那么旧Activity的onPause先调动,然后新Activity才启动
Androidmanifest启动模式
standard
标准模式,默认的启动模式,如果不指定Activity 的启动模式,则使用这种方式启动Activity。这种启动模式每次都会创建新的实例,每次点击 standard 模式创建Activity后,都会创建新的MainActivity覆盖在原Activity 上
singleTop
如果指定启动Activity为singleTop模式,那么在启动时,系统会判断当前栈顶Activity是不是要启动的Activity,如果是则不创建新的Activity而直接引用这个Activity;如果不是则创建新的Activity。
singleTask
singleTask是检测整个Activity栈中是否存在当前需要启动的Activity。如果存在,则将该Activity 置于栈顶,并将该Activity 以上的 Activity都销毁。
singleInstance
申明为singleInstance的Activity会出现在一个新的任务栈中,而且该任务栈中只存在这一个Activity。(不能在一个singleTop或singleInstance的activity不能使用startActivityForResult())
Intent Flag启动模式
Intent intent=new Intent();
intent.setFlags(int flags);
-
Intent.FLAG_ACTIVITY_NEW_TASK
使用一个新的Task来启动一个Activity,但启动的每个Activity都将在一个新的Task中。该Flag通常使用在从Service中启动Activity的场景,由于在Service中并不存在Activity栈,所以使用该Flag来创建一个新的Activity栈,并创建新的Activity实例。 -
Intent.FLAG_ACTIVITY_SINGLE_TOP
使用singletop模式来启动一个Activity,与指定android:launchMode="singleTop"效果相同。 -
Intent.FLAG_ACTIVITY_CLEAR_TOP
使用singleTask模式来启动一个Activity,与指定android:launchMode="singleTask"效果相同。 -
Intent.FLAG_ACTIVITY_NO_HISTORY
使用这种模式启动Activity,当该Activity启动其他Activity后,该Activity就消失了,不会保留在Activity栈中,新活动不会保留在历史栈中,一旦用户切换到其他页面,新活动会马上销毁。
清空任务栈
<activity android:name=".activity.HideTitleActivity"
android:clearTaskOnLaunch="true"/>
clearTaskOnLaunch
在每次返回该Activity 时,都将该Activity 之上的所有Activity都清除。通过这个属性,可以让这个Task每次在初始化的时候,都只有这一个Activity。
finishOnTaskLaunch
与clearTaskOnLaunch属性类似,只不过clearTaskOnLaunch作用在别人身上,而finishOnTaskLaunch作用在自己身上。通过这个属性,当离开这个Activity 所处的 Task,那么用户再返回时,该Activity就会被finish掉。
alwaysRetainTaskState
如果将Activity的这个属性设置为True,那么该Activity所在的Task将不接受任何清理命令,一直保持当前Task状态。