<activity>元素的android:launchMod属性的使用

 
AndroidManifest.xml文件中,<activity>元素是使用频率最高的元素,该元素声明了应用中的活动(Activity)。常用的形式如下:
 
<activity
            android:label="@string/app_name"
            android:name=".HelloAndroidActivity" >

另外,该<activity>元素还有个 android:launchMode属性,该launchMode属性主要用来控制Activity和Task的关系,下面是该属性的取值及含义: 
 
1, standard是该属性的默认值,是默认的任务模式。在没有其他因素的影响下,当调用方通过 Intent 启动此活动时,该Activity会被构造出一个新实例并被加入到调用者的任务栈中去。
 
2, singleTop与standard基本一致,仅在被请求的Activity 正好位于栈顶时情况有所区别。对于launchMode属性等于singleTop的Activity,不再构造新的实例加入到Task栈中,而是将新收到的Intent发送给栈顶的Activity,栈顶的Activity可以通过重载onNewIntent方法来处理新的Intent。这个模式降低了activity位于栈顶时的一些重复开销。
 
3, singleTask当启动具有此项配置的Activity的时候,会先在系统中查找和它的属性值 taskAffinity值相同的任务是否存在;如果存在这样的任务,此Activity就会在这个任务中启动,否则就在新任务中启动。因此,如果我们想使得"singleTask"配置模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。 如果设置了"singleTask"启动模式的Activity启动时找到了相同taskAffinity 的任务,系统将在已存在的任务中寻找该Activity的实例,并将此Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。另外,要想taskAffinity属性相同的Activity被放在同一个Task中,<activity>中的allowTaskReparenting属性需设置为true,或者调用方将Intent的flag添加FLAG_ACTIVITY_NEW_TASK时才会生效。
<activity
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:name=".HelloAndroidActivity"
            android:taskAffinity="hello"
            android:allowTaskReparenting="true" >

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);


 
4, singleInstance,该Activity是它所在的任务栈中 仅有的一个Activity,其它Activity会被放入别的Task中进行。
 
借用别人的总结:
standard模式,可以多次实例化,同一任务栈中可以存在多个该Activity的实例。
singleTop模式,可以多次实例化,但是不会有多个相邻的Activity实例,当堆栈的顶部为相同的Activity时,会调用onNewIntent函数。
singleTask模式,同一个应用中调用该Activity时,如果该Activity没有被实例化,会在本应用程序的Task内实例化,如果已经实例化,会将Task中其上的Activity销毁后,调用onNewIntent;其它应用程序调用该Activity时,如果该Activity没有被实例化,会创建新的Task并实例化后入栈,如果已经实例化,会销毁其上的Activity,并调用onNewIntent。
singleInstance模式,加载该Activity时如果没有实例化,则会创建新的Task后,实例化入栈,如果已经存在,直接调用onNewIntent,该Activity的Task中不允许启动其它的Activity,任何从该Activity启动的其他Activity都将被放到其他task中。
 
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值