2010-07-10 72 views
81

我有一個應用程序,其中包含一個列表作爲其主要活動,然後您可以單擊打開該項目的詳細視圖的項目。我也有一個類似於主要活動的搜索活動,並按預期工作。Android singleTask或singleInstance啓動模式?

但是我希望這個搜索活動只在棧上有一個實例,以便用戶可以多次搜索,並且點擊返回將它們返回到它們在開始搜索之前所處的前視圖(而不是返回到previouse的搜索結果)

singleTask和singelInstance啓動模式似乎做我想要的,所以我不知道哪一個我應該用於這個目的,爲什麼?

回答

139

Application Fundamentals頁的Android開發人員指南:

默認情況下,在 應用程序的所有活動,爲每個 其他的親和力 - 那就是,有一個爲他們都屬於偏好 到相同的 任務。

「singleInstance」活動僅代表 作爲其 任務中的唯一活動。如果它啓動另一個活動,則該活動將被啓動到 不同的任務中,而不管其啓動模式爲 - 好像 FLAG_ACTIVITY_NEW_TASK在 意圖中。在所有其他方面, 「singleInstance」模式與 「singleTask」相同。

如上所述,從未有更多 比一個「singleTask」或 「singleInstance」活動的情況下,使 實例預計處理所有新 意圖。 「單實例」活動 始終位於堆棧頂部 (因爲它是 任務中的唯一活動),所以它始終處於處理意圖的位置。但是, 「singleTask」活動可能會或可能不會 在 堆棧中有其他活動。如果是這樣,則不會在 的位置處理該意圖,並且 意圖被丟棄。 (即使 意圖被丟棄,它的到來將 造成任務前來 前景,它將會繼續存在。)

4 Activities in a Task

因爲從來就沒有超過一個實例無論是啓動模式下的活動,後退按鈕將始終帶您到您案例中活動的現有實例。

一個重要的區別是,「singleTask」不需要爲選擇某項內容的新活動創建新任務。也不必每次都在後退按鈕上刪除新的任務。由於你的活動堆棧都屬於一個用戶的「任務」,並且聽起來不像你有一個錯綜複雜的Intent結構,其中singleInstance可能有利於總是處理它們,所以我建議使用singleTask啓動模式。

這裏是一個很好的博客文章獲得更多信息,以及貸記圖像:Android Activities and Tasks series – An introduction to Android’s UI component model

+3

謝謝!看起來像一個很好的閱讀...事情是四實現我真的想要一個活動的多個實例,只有當前臺活動是一個搜索活動,並執行另一個搜索,如果它使用現有的活動(如市場如何運作) 而爲此,singeTop正是什麼林後,但感謝幫助反正=) 謝謝 – Kman 2010-07-11 01:55:25

+1

嘿,謝謝。這篇寫得很好的文章幫助我掐了一下。 – icecreamman 2011-08-25 21:20:06

+0

感謝您的詳細信息,尤其是這一項*(即使意圖已經被放棄,它的到來也會導致任務到達前臺,並保持原樣),這立即消除了我的困惑。我只是想着如果singleTask Activity不在堆棧的頂部,而我仍然想要導航到它而不指定「FLAG_ACTIVITY_CLEAR_TOP」。 – neevek 2013-07-09 15:52:51

4

singleTasksingleInstance活動只能開始的任務。它們始終處於活動堆棧的根部。而且,該設備一次只能保存一個活動實例 - 只有一個這樣的任務。
更多android:launchMode

+0

最後一句對於singleInstance而言是true,而不是singleTask – 2018-01-15 11:45:01

+0

@SerdarS。感謝您的評論。添加更多關於'singleTask'的信息 - 系統創建一個新任務並在新任務的根目錄下實例化活動。但是,如果一個活動的實例已經存在於一個單獨的任務中,則系統通過調用其onNewIntent()方法將該意圖路由到現有實例,而不是創建新實例。一次只能有一個活動實例。爲更多[developer.android.com](https://developer.android.com/guide/components/activities/tasks-and-back-stack.html) – 2018-01-15 12:37:06

+0

明白了,然後我錯了。很抱歉打擾。 – 2018-01-15 13:26:38

27

在一個簡單的way-

singleTask:

系統將創建一個新的任務和新任務的根實例化的活動。但是,如果活動的實例已經存在於單獨的任務中,則系統通過調用其方法來將該意圖路由到現有實例,而不是創建新的實例。一次只能存在活動的one instance

注意:儘管活動在新任務中啓動,但後退按鈕 仍會將用戶返回到上一個活動。

singleInstance-

"singleTask",除了不啓動任何其他活動納入控股實例任務系統。該活動始終是其任務中唯一且唯一的成員; 此活動開始的任何活動都在單獨的任務中打開。

相關問題