簡體   English   中英

使用FLAG_ACTIVITY_SINGLE_TOP有什么含義?

[英]What are the implications of using FLAG_ACTIVITY_SINGLE_TOP?

有人可以解釋一下FLAG_ACTIVITY_SINGLE_TOP嗎? 醫生說

如果設置了該活動,則如果該活動已經在歷史記錄堆棧的頂部運行,則不會啟動該活動。

但是,這種說法似乎掩蓋了很多含義。 例如,網上有人提到最高活動可能與任務堆棧頂部的活動不同。 我不知道這一切意味着什么。 因此,我的問題更大: 使用FLAG_ACTIVITY_SINGLE_TOP有什么含義?

以下是我在線閱讀的答案。 這不是您要提出的問題的完整答案,所以我真的希望其他人可以在其中添加更多的肉。

如果活動的實例已經存在於當前任務的頂部,則系統通過調用其onNewIntent()方法將意圖路由到該實例,而不是創建活動的新實例。 該活動可以被實例化多次,每個實例可以屬於不同的任務,並且一個任務可以具有多個實例(但前提是位於后堆棧頂部的活動不是該活動的現有實例)。

例如,假設任務的后堆棧由根活動A組成,根活動A在頂部,活動B,C和D(堆棧為ABCD; D在頂部)。 意圖到達類型D的活動。如果D具有默認的“標准”啟動模式,則將啟動該類的新實例,並且堆棧將變為ABCDD。 但是,如果D的啟動模式為“ singleTop”,則D的現有實例將通過onNewIntent()傳遞意圖,因為它位於堆棧的頂部:堆棧仍為ABCD。 但是,如果到達類型B的活動的意圖,則將B的新實例添加到堆棧中,即使其啟動模式為“ singleTop”。

這意味着,如果該活動已經開始並且您再次調用它,則不會用新的活動替換它,也不會創建另一個活動(有時會發生,並且當您回擊並且看到相同的活動時很明顯),相反,您將把那個拉起來。

假設您有3個活動:A-> b-> c。 您在C中,先通過A到達B,然后通過B到達。如果您使用SINGLE_TOP過濾器從C調用A,則您的堆棧看起來將像A,C,B-如果您開始點擊后退按鈕,則可以到C,然后到B。我可能是錯的,但這就是我所相信的。 您還可以將CLEAR過濾器與它一起傳遞以擦除后堆棧,然后按技巧從A處開始,后面沒有堆棧,您將直接回到家中。 -如果不正確,請更正。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM