2015-08-09 164 views
0

有人能解釋一下FLAG_ACTIVITY_SINGLE_TOP是做什麼的嗎?文檔說使用FLAG_ACTIVITY_SINGLE_TOP會產生什麼影響?

如果設置,如果活動已在 歷史堆棧的頂部運行將不會啓動。

但是這句話似乎掩蓋了它下面的很多含義。例如,有人在線提到最高活動可能與任務堆棧頂部的活動不一樣。我不知道這意味着什麼。因此,我更大的問題:使用FLAG_ACTIVITY_SINGLE_TOP會產生什麼影響?

回答

0

這意味着如果活動已經啓動並且再次調用它,則不會用新的活動替換它,而且您也不會創建另一個活動(這有時會發生,並且在您回彈時看到相同的活動),相反,你會拉那一個。

所以說你有3個活動:A - > B - > C。你在C中,然後通過A然後B來到它。如果你使用SINGLE_TOP過濾器從C調用A,你的棧看起來像A,C,B - 如果你開始按下後退按鈕,你會去到C,然後B.我可能是錯的,但多數民衆贊成我相信這是。你也可以通過CLEAR過濾器來清除後面的堆棧,並且技術性地從A開始回來,並且沒有後面的堆棧,你會直接回到家中。 - 如果不準確請糾正。

1

以下是我在線閱讀的答案。這是不是你問的問題的完整答案,所以我真的希望別人可以添加更多的肉。

如果活動的實例已經存在於 當前任務的頂部,系統會透過一個 調用其onNewIntent()方法的意圖,該實例,而不是創建一個新的實例 活動。該活動可以多次實例化,每個實例可以屬於不同的任務,並且一個任務可以具有多個 實例(但是隻有在後端堆棧頂部的活動不是該活動的現有實例時)。例如,假設一個任務的反向堆棧由根活動A 和頂部的活動B,C和D(堆棧是A-B-C-D; D在 頂部)組成。意圖到達類型D的活動。如果D具有 默認的「標準」啓動模式,則啓動該類的新實例 ,堆棧變爲A-B-C-D-D。但是,如果D的啓動模式 爲「singleTop」,則D的現有實例將通過onNewIntent()傳遞意圖 ,因爲它位於堆棧的頂部: 堆棧仍爲A-B-C-D。但是,如果意圖到達類型B的活動 ,則即使其啓動模式爲「singleTop」,B的新實例也會添加到堆棧中。

相關問題