亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消