指定Activity的LaunchMode:
<activity
android:name=".SingleTaskActivity"
android:label="singleTask launchMode"
android:launchMode="singleTask">
standard
默認(rèn)模式库菲,在Android 5.0 Lollipop以前,不論在當(dāng)前App或是第三方App中呼出菠齿,指定新創(chuàng)建的Activity將會(huì)添加到調(diào)用者App的Task中佑吝,并疊加在其Stack堆棧頂,通過任務(wù)管理器中可見該Activity界面歸屬于調(diào)用者的App進(jìn)程绳匀。
在Lollipop及之后的版本芋忿,如果調(diào)用者是第三方App,則該Activity會(huì)被添加到一個(gè)新建Task的根部疾棵,通過任務(wù)管理器會(huì)看到該Activity依然歸屬于第三方App(與調(diào)用者App分離)
singleTop
大部分情況下表現(xiàn)與standard相同戈钢。
例外情況是,當(dāng)Task頂已存在相同的Activity實(shí)例時(shí)陋桂,將不再創(chuàng)建新Activity逆趣,而是通過onNewIntent()
方法重用棧頂Activity。
需要注意的是嗜历,該模式僅作用于與調(diào)用者處于同一個(gè)Task的情況(即第三方調(diào)用不起效果宣渗,在當(dāng)前App的另一Task中的Activity實(shí)例也不會(huì)得到重用)。
singleTask
與standard和singleTop非常不同梨州,使用該模式啟動(dòng)的Activity在整個(gè)系統(tǒng)中僅允許存在一個(gè)單實(shí)例對(duì)象痕囱,存放在適當(dāng)?shù)?/strong>Task中,再次呼出該Activity時(shí)將通過onNewIntent()
方法重用實(shí)例暴匠,并將Task置頂鞍恢。
在所屬App中呼出時(shí)
該Activity會(huì)創(chuàng)建在App相同Task的堆棧頂,如果實(shí)例已存在每窖,則堆棧中該實(shí)例之上的所有Activity都將被銷毀帮掉。
如果需要在新Task中創(chuàng)建該Activity,則需要聲明taskAffinity
指定Task名稱:
<activity
android:name=".SingleTaskActivity"
android:label="singleTask launchMode"
android:launchMode="singleTask"
android:taskAffinity="">
在第三方App中呼出時(shí)
該Activity會(huì)創(chuàng)建在新建Task中并置頂窒典,如果該Activity所屬App已啟動(dòng)并存在一個(gè)Task蟆炊,則直接加到該Task中并置頂。
如果已有一個(gè)實(shí)例存在于任意一個(gè)Task中瀑志,則該singleTask實(shí)例之上所有Activity都將被銷毀涩搓,并將該Task置頂。
singleInstance
與singleTask非常類似劈猪,系統(tǒng)中僅允許存在一個(gè)單實(shí)例對(duì)象昧甘。
不同的是,持有該Activity的Task不可再存放其他Activity實(shí)例战得,該單實(shí)例Activity獨(dú)占整個(gè)Task堆棧充边。
從該Activity中呼出其他新Activity時(shí),將自動(dòng)創(chuàng)建新Task存放常侦。
需要注意的是痛黎,通過dumpsys activity
顯示予弧,即便App中擁有兩個(gè)Task,在任務(wù)管理器中依然只顯示最近打開的那一個(gè)Task湖饱,無(wú)法自由來(lái)回切換到另一個(gè)Task中掖蛤。(此時(shí)從啟動(dòng)器中啟動(dòng)App界面,可以調(diào)出主Task畫面井厌,但取而代之的是singleInstance
的Task被放到了后臺(tái)..)
解決方法是通過聲明taskAffinity
蚓庭,讓任務(wù)管理器啟用多任務(wù)模式:
<activity
android:name=".SingleInstanceActivity"
android:label="singleInstance launchMode"
android:launchMode="singleInstance"
android:taskAffinity="">
※ 非必要時(shí),不推薦使用該singleInstance
模式
參考原文
Understand Android Activity's launchMode: standard, singleTop, singleTask and singleInstance