2013-06-27 69 views
10

我正在瀏覽單個實例的文檔,並試用了幾個樣本。 在我的一個示例中,我有三個活動:A-> B-> C, 其中B有android:launchMode =「singleInstance」在清單中。活動A和C具有默認啓動模式。Android:啓動模式'單一實例'

場景:

經由A和B(即A-> B-> C)導航到℃後,從活動C返回按鈕按壓取到活動A(C-> A),但背面從活動A按下按鈕不會退出應用程序,而是將活動B放在前面,然後從活動B退回按鈕即可退出應用程序。

問題

爲什麼活動B來的時候後退按鈕從活動A按下前景?

其他情況:如果用戶按下設備主頁按鈕,長按家回來的應用

Similarliy,從活動C,C停留在前臺。但後退按鈕流程需要C-> A - >退出應用程序。這次活動B沒有來到前臺。

回答

20

導航後A-> B你有兩個任務:第一個包含一個,第二個包含B位於頂部,A低於此值。現在

從B-導航時> C ^的Android啓動活動Ç到含有A(它不能啓動它到含有B中的任務,因爲B定義爲「singleInstance」任務,所以它啓動到一個任務具有相同的「taskAffinity」,在這種情況下任務包含A)。爲此,Android將包含A的任務帶到前面。現在您有兩項任務:前面包含A和C的任務,另一個包含低於B的任務。

現在您按BACK鍵完成活動C並返回到任務下方的活動,即C。您仍有2個任務:一個包含C的前一個,另一個包含B 。

現在您再次按下BACK鍵。這完成了活動A(並因此完成了持有A的任務),並將任務堆棧中的前一個任務帶到前面,即包含B的任務。你現在有1級的任務:包含B.

任務在你其他情形,從A-> B-> C^導航之後,你開始2項任務:包含A和C在面前的任務,第二個包含B以下的B。

現在您按HOME按鈕。你現在說你「通過長按」回到應用程序「。這不完全正確。您不能「回到應用程序」。你只能「回到任務」。但是你有兩個不同的任務:如果你長時間按下,你應該看到2個任務。它們可能具有相同的圖標(除非您爲活動B提供了不同的圖標),因此您可能無法區分它們。如果您選擇包含A和C的任務,那麼該任務將被帶到最前面,活動C位於最前面。如果您現在按下BACK鍵,活動C將完成並且其下的活動將顯示活動A.如果您現在再次按下BACK鍵,則活動A將結束,您將返回到HOME屏幕。包含B的任務仍在最近的任務列表中,但它不再位於其他任務下的任務堆棧中,因爲當您按HOME按鈕時,它就像回到零。你重新開始。您沒有任何活動任務,因此所有任務都在一行中,它們不在堆棧中,也沒有層次結構。

另外,在您的問題中,您使用短語「退出應用程序」。這也不完全正確。 BACK按鈕按下的唯一一件事就是完成當前活動。如果當前活動是任務中唯一的活動,它也會完成該任務。但是,它不會「退出應用程序」。特別是在你的情況,因爲你的「應用程序」實際上存在於2個獨立的任務。

希望這是明確的。

+1

非常感謝David。您的回答非常清楚地解釋了這個概念,非常有幫助:)爲了增加更多細節,我在同一個應用程序中將所有這三項活動A,B和C都包含在內。在長時間的家庭報刊上,我看不到兩個單獨的任務,但只有一個。 另外就其他情景而言,「如果您現在再次按下BACK鍵,則活動A將完成並且您將返回到主屏幕。」 **問:**爲什麼不需要我們包含B的任務,因爲包含B的任務應該低於包含A和C的任務權限?如果我錯了,請糾正我。 – Pravy

+0

請張貼您的清單,然後我可以幫助您更多。只需將它作爲編輯添加到您的問題。 –

+0

嘿Pravy,你的困惑終於解決了嗎?爲什麼不讓我們的任務包含B?我也有同樣的困惑。如果你知道,請告訴我。謝謝。 – CodeAlien

1

doc

  1. 「singleInstance」 活動只能開始的任務。它們始終處於活動堆棧的根部。而且,該設備一次只能保存一個活動實例 - 只有一個這樣的任務。

  2. 另一方面,「singleInstance」活動不允許其他活動成爲其任務的一部分。這是該任務中唯一的活動。如果它開始另一項活動,該活動被分配到不同的任務

+0

:感謝您的回覆,您的第一點清楚地說明了爲什麼它再次來到前景。 我需要更多關於活動堆棧,各種任務和個人活動如何相關的說明。 根據我對你答覆的理解,操作系統維護一個名爲'活動棧'的棧,其中包含任務堆棧, 其中inturn(即單個任務)將包含活動。如果任何活動創建爲單個實例,那麼它將被創建爲單獨的任務,並且該任務將被放置在堆棧的底部。親愛的,請讓我知道我的理解是否正確。 – Pravy

+0

@Pravy ..你的理解與我匹配:) .. ..如果一個活動正常開始(不是單例或單行),那麼它只是推到堆棧 – stinepike

+0

嗯謝謝..但同樣的行爲不同,當用戶按下設備來自活動C的主頁按鈕。我在另一場景中更新了它。我可以知道可能是什麼原因嗎? – Pravy