标签:
android:launchMode="standard"
标准模式,默认情况下Activity的启动模式就是标准模式,以下用ABCD表示四个不同的Activity。
标准模式下,每次启用Activity会为这个Activity产生一个实例,不管该Activity是否已经在当前Activity任务栈中存在。
android:launchMode="singleTop"
栈顶复用模式。比如当前Activity任务栈中依次有ABCD,再启动D,那么任务栈中仍是ABCD,不会重新创建D,只会执行D的onNewIntent()方法。如果启用的Activity不是位于栈顶,那么依旧会重新启用一个新的Activity。
android:launchMode="singleTask"
栈内复用模式。首先该Activity会找自己启动所在的栈
一、如果不存在,创建这个栈,创建Activity实例,加入这个栈。
二、如果已存在这个栈,但当前栈中并无该Activity的实例,创建Activity实例,加入这个栈。
三、如果已存在这个栈,但当前栈中已有该Activity的实例,则不创建,将该Activity放到栈顶,位于该Activity之上的Activity都将在该栈中清除(singleTask含有clearTop属性),执行该Activity的onNewIntent()方法。
举例说明:
一、当前有任务栈S1,且任务栈中有ABC三个Activity,C位于栈顶。此时启动D,D所需要的栈为S2,S2不存在,创建S2,创建D加入S2中。
二、当前有任务栈S1,且任务栈中有ABC三个Activity,C位于栈顶。此时启动D,D所需要的栈为S2,创建D加入S2中。
三、当前任务栈中有ADBC四个Activity,C位于栈顶。此时在当前栈中启动D,那么当前任务栈中为AD两个,D位于栈顶,BC被清除,clearTop属性。
android:launchMode="singleInstance"
单实例模式。该模式的Activity只能单独位于一个任务栈中。
说到任务栈那么有这样一个属性
android:taskAffinity="com.zttjava.task1"
默认情况下,该属性的值为应用的包名,如果指定模式为singleTask,为了将该Activity放入另一个任务栈栈,那么必须修改该属性的值与包名不同。
下面介绍一下Activity的Flags
//singleTask模式
Intent.FLAG_ACTIVITY_NEW_TASK;
Intent.FLAG_ACTIVITY_CLEAR_TOP;
//singleTop模式
Intent.FLAG_ACTIVITY_SINGLE_TOP;
标签:
原文地址:http://blog.csdn.net/u010696525/article/details/51354015