# Android中Activity四种启动模式和taskAffinity属性详解 #(2原创分享)

# Android Activity 四种启动模式和taskAffinity 属性详解 #(2原创分享)
---------- 影子侠开发者社区Rong
##   Activity 四种启动模式详解 ##
activity 有四种启动模式,分别为standard singleTop singleTask singleInstance 。如果要使用这四种启动模式,必须在manifest 文件中<activity> 标签中的launchMode 属性中配置,如:
           <activity android:name=".app.InterstitialMessageActivity"
                 android:label="@string/interstitial_label"
                 android:theme="@style/Theme.Dialog"
                 android:launchMode="singleTask"
                </activity>
同样,在Intent 类中定义了很多与Activity 启动或调度有关的标志,<activity> 标签中有一些属性,这些标志,属性和四种启动模式联合使用,会在很大程度上改变activity 的行为,进而会改变task back stask 的状态。关于Intent 中的标志和<activity> 标签中有一些属性会在本文后面介绍,在这一节中,先介绍activity 的四种启动模式。
**standard**
标准启动模式,也是activity 的默认启动模式。在这种模式下启动的activity 可以被多次实例化,即在同一个任务中可以存在多个activity 的实例,每个实例都会处理一个Intent 对象。如果Activity A 的启动模式为standard ,并且A 已经启动,在A 中再次启动Activity A ,即调用startActivity new Intent this A.class )),会在A 的上面再次启动一个A 的实例,即当前的桟中的状态为A-->A
**singleTop**
如果一个以singleTop 模式启动的activity 的实例已经存在于任务桟的桟顶,那么再启动这个Activity 时,不会创建新的实例,而是重用位于栈顶的那个实例,并且会调用该实例的onNewIntent() 方法将Intent 对象传递到这个实例中。举例来说,如果A 的启动模式为singleTop ,并且A 的一个实例已经存在于栈顶中,那么再调用startActivity new Intent this A.class ))启动A 时,不会再次创建A 的实例,而是重用原来的实例,并且调用原来实例的onNewIntent() 方法。这是任务桟中还是这有一个A 的实例。
如果以singleTop 模式启动的activity 的一个实例已经存在与任务桟中,但是不在桟顶,那么它的行为和standard 模式相同,也会创建多个实例。
**singleTask**
谷歌的官方文档上称,如果一个activity 的启动模式为singleTask ,那么系统总会在一个新任务的最底部(root )启动这个activity ,并且被这个activity 启动的其他activity 会和该activity 同时存在于这个新任务中。如果系统中已经存在这样的一个activity 则会重用这个实例,并且调用他的onNewIntent() 方法。即,这样的一个activity 在系统中只会存在一个实例。
其实官方文档中的这种说法并不准确,启动模式为singleTask activity 并不会总是开启一个新的任务。详情请参考 解开Android 应用程序组件Activity "singleTask" 之谜,在本文后面也会通过示例来进行验证。
**singleInstance**
总是在新的任务中开启,并且这个新的任务中有且只有这一个实例,也就是说被该实例启动的其他activity 会自动运行于另一个任务中。当再次启动该activity 的实例时,会重用已存在的任务和实例。并且会调用这个实例的onNewIntent() 方法,将Intent 实例传递到该实例中。和singleTask 相同,同一时刻在系统中只会存在一个这样的Activity 实例。
此文章系原创,如需转载,请注明出处影子侠开发者社区www.yingzixia.com(技术Q群:188168040)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值