Android的启动模式(android:launchMode)

原文地址:

http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

 

此篇短文是介绍activity是如何被启动的。

有4种模式与Intent对象中的antivity标记一起协同来决定activity被调用时的表现行为。

它们是:

“standard”

“singleTop”

“singleTask”

“singleInstance”

默认方式是“standard”。

 下表所示,上述模式被分为两类,“standard”和“singleTop”是一类,“singleTask”和“singleInstance”是一类。一个Activity是“standard”或“singleTop”启动模式,可以被实例化多次。这些实例可以属于任何task并可以位于activity栈的任何位置。典型的例子,调用startActivity()来把它们加载到栈中(除非intent对象包含FLAG_ACTIVITY_NEW_TASK标记,那样的话会选择不同的task---详询taskAffinity属性)。

 与此相反(in contast),“singleTask”和“singleInstance”的activity只能启动一个task。它们通常在activity栈的根(root)上,此外(moreover),设备中同一时间只保持唯一的一个activity实例---只有一个这样的栈。

 “standard”和“singleTop”模式在某一方面也是不同的:一旦有一个新的intent给“standard”activity,一个响应这个intent的新的实例就会被创建。每个实例会处理单独的intent。相似的,一个“singleTop”activity的实例可能也会被创建去处理新的intent。然而,如果目标task已经存在一个此activity的实例在栈顶,这个实例会收到这个新intent(在onNewIntent中回调);新的实例就不会被创建了。在其他情况,举个例子,如果一个已存在的“singleTop”activity实例在目标task 中,但没有在栈顶,或者它在栈顶却没有在目标task中,一个新的实例就会被创建并且推进栈中。

 “singleTask”和“singleInstance”模式只在一个方面有区别:“singleTask” activity允许其他activity成为task中的一部分 ,并且它通常在task栈的根部,其它activity(必须是“standard”和“singleTop”模式的activity)可以加载到这个栈上。另一方面,“singleInstance”模式的activity不允许任何其它activity加载到这个task栈上。它是这个task中唯一的activity。如果它启动另一个activity,那个activity会被指引到不同的task中,这个行为就像在intent中用FLAG_ACTIVITY_NEW_TASK标记一样。(linc注:通常来说,manifest中用“singleTask”启动模式和在intent中用FLAG_ACTIVITY_NEW_TASK标记的行为是一样的)

用例启动模式多个实例?注释
正常(标准)启动模式(对大部分activity适用)"standard"默认的。系统通常会在目标task中创建这个activity的新的实例并路由intent给它。
正常(标准)启动模式(对大部分activity适用)"singleTop"有条件的如果activity的实例已经存在在目标task的栈顶,系统会通过onNewIntent()方法路由intent给这个实例,而不会去创建一个新的实例。
特殊的启动模式(不推荐在普遍使用)"singleTask"系统创建这个activity在新的task的栈顶并路由intent给它。然而,如果一个activity的实例已经存在,系统会通过调用onNewIntent()方法路由intent给这个实例,而不会去创建一个新的实例。
特殊的启动模式(不推荐在普遍使用)"singleInstance"和“singleTask”相同,唯一的差别是系统不会加载其它activity到其保持的task中。这个activity通常是它的的task中唯一的成员。

 

上表所示,“standard”是默认的模式并适合于绝大部分类型的activity。“singleTop”也是普通的很有用的启动模式对部分类型的activity适用。其它模式,“singleTask”和“singleInstance”模式,不适用绝大多数的应用,因为它们的结果(启动后的行为)在交互模型中对于用户来说是不熟悉的,这与大部分的程序都非常不同。

 

 不论你选择了哪种启动模式,一定要测试activity在启动和使用BACK键在其它activity和task中返回时的可用性。

更多的关于启动模式和它们使用intent标记交互的信息,见Tasks and Back Stack文档。

linc注:我之前写了一篇文章是讨论singleTask和intent的newtask flag行为不一致的,最近正在关注activity的相关细节,会定期总结一些东西和大家分享。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值