Activity启动模式

一、standard(标准模式)

系统默认的启动模式,如果在AndroidMainfest文件中Activity没有设置launchMode时,该Activity就是已默认的standard模式启动。此种模式下每次启动一个Activity不管Activity的实例是否存在,都会重新创建一个新的实例。一个Activity可以被实例化多次,每个实例可以属于不同的任务栈,一个任务栈中也可以有多个实例。

二、singleTop(栈顶复用模式)

此时如果新的Activity已经位于任务栈的栈顶时,Activity不会创建新的实例,而是会调用它的onNewIntent方法。这个Activity可以被实例化多次,每个实例可以属于不同的任务栈,一个任务栈可以有多个实例(当且仅当Activity不处于栈的顶部时)。假设当前的站内有ABCD四个Activity,A处于栈底,D处于栈顶,如果此时想要再次启动D时,如果D的启动模式是standard那么栈内的情况是ABCDD,如果D的启动模式为singleTop时栈内的情况依然为ABCD。

注意:当一个新的Activity实例被创建时,用户可以通过按返回键回到之前的Activity。但是当Activity存在的实例正在处理一个新的意图时,用户不能通过按返回键回到Activity在到达onNewInent之前的状态。

三、singleTask(栈内复用模式)

启动一个新的Activity时,系统会首先判断当前Activity所需的任务栈是否存在,如果不存在则先创建新的任务栈,然后在新的任务栈中实例化要启动的Activity。如果Activity已经存在再所需的任务栈中,系统只会调用onNewIntent()方法,而不是去创建一个新的实例;如果所需的任务栈中不存在该实例则会创建一个新的实例。一次只能存在一个实例。

注意:尽管Activity在新的任务栈中启动,但是用户按返回键事仍然可以回到之前的Activity.

四、singleInstance(单实例模式)

和singleTask有一样的特性,除此之外Activity只能单独的位于一个任务栈中,此任务栈中只能有有一个实例。

无论一个Activity是在新的任务栈中启动还是处于启动它的Activity所在的任务栈中,点击后退按钮时,总是能返回到前一个Activity。但是如果启动的Activity是singleTask模式并且该Activity已存在于后台的任务栈中,那么整个任务栈都将会切换到前台,此时后退栈中包含所有的任务栈中的Activity。如下图示例:

Activity启动模式_第1张图片

如果2要启动的是X,则后退栈中列表为12X。这是因为栈的“先进后出”原则,如果X想回到栈顶则Y必须先出栈。所以我们可以看到singleTask有清除栈顶的功能。

注意:launchMode可能会被Intent的Flags标记所覆盖。

五、Activity的Flags

启动一个Activity,可以在startActivity的Intent添加标志来其任务的默认关联。

FLAG_ACTIVITY_NEW_TASK

该标志的作用与“singleTask”一样。

FLAG_ACTIVITY_SINGLE_TOP

该标志的作用与“singleTop”一样。

FLAG_ACTIVITY_CLEAR_TOP

具有此标记的Activity,在它启动的时候,同一个任务栈内的位于它之上的Activity都要清除出栈。经常和FLAG_ACTIVITY_NEW_TASK一起使用。

你可能感兴趣的:(android,android四大组建)