天天看點

Android Task 任務棧

在軟體設計中,在每個Activity中會有跳轉到首頁面的按鈕. 但在實際使用中發現,任務棧中的資料不會彈出 會出現ABA這樣的情況,發現這樣可以解決:

<activity>中的launchMode屬性。它有四種模式:"standard", "singleTop", "singleTask", "singleInstance"。

standard模式, 是預設的也是标準的Task模式,在沒有其他因素的影響下,使用此模式的Activity,會構造一個Activity的執行個體,加入到調用者的Task棧中去,對于使用頻度一般開銷一般什麼都一般的Activity而言,standard模式無疑是最合适的,因為它邏輯簡單條理清晰,是以是預設的選擇。

而singleTop模式,基本上于standard一緻,僅在請求的Activity正好位于棧頂時,有所差別。此時,配置成singleTop的Activity,不再會構造新的執行個體加入到Task棧中,而是将新來的Intent發送到棧頂Activity中,棧頂的Activity可以通過重載onNewIntent來處理新的Intent(當然,也可以無視...)。這個模式,降低了位于棧頂時的一些重複開銷,更避免了一些奇異的行為(想象一下,如果在棧頂連續幾個都是同樣的Activity,再一級級退出的時候,這是怎麼樣的使用者體驗...),很适合一些會有更新的清單Activity展示。一個活生生的執行個體是,在Android預設提供的應用中,浏覽器(Browser)的書簽Activity(BrowserBookmarkPage),就用的是singleTop。singleTop模式,雖然破壞了原有棧的邏輯(複用了棧頂,而沒有構造新元素進棧...),但并未開辟專屬的Task。而singleTask,和singleInstance,則都采取的另辟Task的蹊徑。