为了账号安全,请及时绑定邮箱和手机立即绑定

Android的启动模式(android:launchMode)

标签:
Android

此篇短文是介绍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的相关细节,会定期总结一些东西和大家分享。

原文链接:http://www.apkbus.com/blog-623422-58644.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消