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;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值