2012-06-13 26 views
2

我與Android堆棧中有疑問堆棧中,請考慮場景我有兩個活動A和B在相同的應用程序,使用FLAG_ACTIVITY_NEW_TASK任務,並在Android

  1. 開始與A
  2. 從小艇乙
  3. 的B推出使用FLAG_ACTIVITY_NEW_TASK
  4. 按返回鍵3次,返回到主屏幕。

我的問題是,如何使用這個標誌的後臺堆棧,是每次創建的新任務,前一個任務被推送到後臺或在相同的任務上創建活動。

我的疑問是,如果第一個是正確的,那麼確實後退按鈕真正從堆棧的頂部移除該活動,如果第二個是正確什麼是正確意義上使用該標誌。

在此先感謝。

問候, 羅希特

回答

2

首先,使用FLAG_ACTIVITY_NEW_TASK創建新任務除非你已經明確地在清單中設置android:taskAffinity爲B.啓動B上的原因是,由默認情況下,在您的應用程序的所有活動具有相同的taskAffinitytaskAffinity覆蓋FLAG_ACTIVITY_NEW_TASK

如果已設置A和/或B的taskAffinity使它們是不同的(或兩個空的),那麼它的工作原理是這樣的:

  • 用戶從主屏幕啓動一個。你現在有一個任務(姑且稱之爲TaskX)
  • 一推出B帶FLAG_ACTIVITY_NEW_TASK。你現在有兩個任務(讓我們稱之爲新任務TaskY)。 TaskX被推送到後臺,TaskY處於前臺。
  • 乙啓動一個與FLAG_ACTIVITY_NEW_TASK。你仍然只有兩個任務。 B(在TaskY中)啓動了A,它創建了A的一個新實例並將其放入TaskX中,因爲A的第一個實例與A的第二個實例具有相同的taskAffinity)。這也導致TaskX來到前臺,TaskY去後臺。
  • 按 「後退」。 A的第二個實例從堆棧中移除,並返回到TaskX中A的第一個實例。按下「返回」鍵返回當前任務內的
  • 按「返回」。 A的第一個實例從堆棧中移除。 TaskX現在是空的,因爲它沒有任何活動。先前的任務(TaskY)被帶到前臺並且B被恢復。
  • 按「返回」。 B的實例將從堆棧中移除。 TaskY現在爲空,並顯示主屏幕。