android LaunchMode之SingleTask

昨天看了一下SingleTask的LaunchMode,意思是說若是一個Activity在Manifest文件中的LaunchMode設置爲SingleTask時,該Activity就在一個獨立的Task中。當時看了文檔以後,有點不明白的是「在一個獨立的task中」如何理解?shell

其實,這句話的意思是保證這個activity處於"某一個"task中,而無論當前task中是否有其餘activity(這也許就是與SingleInstance的根本區別吧)。例如,咱們有Root Activity A,在A中啓動了ActivityB(launch mode是sinleTask)。這時Application Task的stack是B A,若是咱們回到Home,啓動另外一個Application的Activity C,若是在C中啓動B,則系統會將以前的Task Stack放到前臺。這時用戶看到的就是B。當按back時返回的是B的前一個Activity A.再back時退出前一個stack,回到當前的stack,即C。app

考慮另外一種狀況,B依舊是SingleTask的. 在一個Application的Task Stack中有C B A,而後在另外一個Application中啓動B。這時會發生什麼?.net

答案是:系統會把前一個Task放到前臺,可是它的stack已經變成B A,C已經被系統丟棄了。blog

總結:一、SingleTask的Activity只能在一個Task中,系統老是能找到一個已經存在的Activity;文檔

二、當在其餘app中調用(或者在同一個activity stack中調用)某個singleTask的Activity時,須要注意:系統會把這個Activity之上的activity都清空,並將它所在的Task Stack置於前臺,可能會致使其餘APP的狀態丟失。例如activity statck有兩個SingleTask的B A,若是從B切換到A,則B會從棧頂清除,只剩下A。get

補充一下singleInstance的感覺:it

single instance有點像single task,它老是一個activity佔據一個task stack。在同一個app中,A->B,會有兩個stack,B在前,A在後,若是此時B->C,會出現如下狀況:io

C總結

A      Bactivity

若是退出C,返回到A,退出A,返回到B

若是是在其餘的app中X-B

B  X

若是此時再B->C,則會出現以下:

C B X

返回時依次顯示。

adb shell dumpsys activity查看task stack.

最後:推薦某個作出實驗的blog http://blog.csdn.net/liuhe688/article/details/6754323

相關文章
相關標籤/搜索