Android的啟動模式(android:launchMode)

來源:互聯網
上載者:User

原文地址:

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的相關細節,會定期總結一些東西和大家分享。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.