activity有四種載入模式:standard(預設), singletop, singletask和 singleinstance。以下逐一舉例說明他們的區別:
一、standard:activity的預設載入方法,即使某個activity在task棧中已經存在,另乙個activity通過intent跳轉到該activity,同樣會新建立乙個例項壓入棧中。
例如:現在棧的情況為:a b c d,在d這個activity中通過intent跳轉到d,那麼現在的棧情況為: a b c d d 。此時如果棧頂的d通過intent跳轉到b,則棧情況為:a b c d d b。此時如果依次按返回鍵,d d c b a將會依次彈出棧而顯示在介面上。
二、singletop:如果某個activity的launch mode設定成singletop,那麼當該activity位於棧頂的時候,再通過intent跳轉到本身這個activity,則將不會建立乙個新的例項壓入棧中。
例如:現在棧的情況為:a b c d。d的launch mode設定成了singletop,那麼在d中啟動intent跳轉到d,那麼將不會新建立乙個d的例項壓入棧中,此時棧的情況依然為:a b c d。但是如果此時b的模式也是singletop,d跳轉到b,那麼則會新建乙個b的例項壓入棧中,因為此時b不是位於棧頂,此時棧的情況就變成了:a b c d b。
三、singletask:如果某個activity是singletask模式,那麼task棧中將會只有乙個該activity的例項。
例如:現在棧的情況為:a b c d。b的launch mode為singletask,此時d通過intent跳轉到b,則棧的情況變成了:a b。而c和d被彈出銷毀了,也就是說位於b之上的例項都被銷毀了。
關於singletask這個網上頗有爭議,包括google api上的說明也讓我看的是一頭霧水,自己用例項親測,終於算是搞清楚了
正解:1.singletask 並不一定處於棧底
2.singletask 並一定會是棧底的根元素 3.
singletask 並不一定會啟動新的task
情況一:如果在本程式中啟動singletask的activity:假設activitya是程式的入口,是預設的模式(
standard
),activityb是
singletask 模式,由
activitya啟動,剛
activityb不會位於棧底,不是根元素,不會啟動新的task,此種情況
activityb會和
activitya在乙個棧中,位於
activitya上面
情況二:
如果activityb由另外乙個程式啟動:假設apka是情況一中的應用,apkb是測試程式,在apkb中啟動apka中的
activityb,剛
activityb會位於棧底,是根元素,會啟動新的task
注意:singletask模式的activity不管是位於棧頂還是棧底,再次執行這個activity時,都會destory掉它上面的
activity來保證整個棧中只有乙個自己,切記切記
四、singleinstance:將activity壓入乙個新建的任務棧中。
例如:task棧1的情況為:a b c。c通過intent跳轉到d,而d的launch mode為singleinstance,則將會新建乙個task棧2。此時task棧1的情況還是為:a b c。task棧2的情況為:d。此時螢幕介面顯示d的內容,如果這時d又通過intent跳轉到d,則task棧2中也不會新建乙個d的例項,所以兩個棧的情況也不會變化。而如果d跳轉到c,則棧1的情況變成了:a b c c,因為c的launch mode為standard,此時如果再按返回鍵,則棧1變成:a b c。也就是說現在介面還顯示c的內容,不是d。
Activity四種啟動模式
launchmode在多個activity跳轉的過程中扮演著重要的角色,它可以決定是否生成新的activity例項,是否重用已存在的activity例項,是否和其他activity例項公用乙個task裡。這裡簡單介紹一下task的概念,task是乙個具有棧結構的物件,乙個task可以管理多個acti...
Activity四種啟動模式
activity的啟動模式可以通過androidmanifest.xml檔案中的元素的屬性來指定,一共有4中模式 android name activitymain android launchmode singletask 1 standard 2 singletop 3 singletask 4...
Activity四種啟動模式
我們介紹activity的四種啟動模式,分別為standard singletop singletask singleinstance,在androidmanifest.xml中的標籤的android launchmode屬性可以設定啟動模式。1 standard模式 standard是activi...