Activity的启动模式

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;

你可能感兴趣的:(Activity的启动模式)