Android12 新的啟動模式launchMode="singleInstancePerTask"
新的啟動模式singleInstancePerTask
Android 大家熟知的啟動模式
standard 標(biāo)準(zhǔn)模式
我們每次新建Activity的時(shí)候唉锌,默認(rèn)就是standard 標(biāo)準(zhǔn)模式,不管返回棧中有沒有都會新建一個(gè)Activity放在棧頂, 即使棧頂存在也會新建挽荠。
singleTop 單個(gè)棧頂模式
如果返回棧的棧頂存在,則不新建尉共,直接顯示給用戶迷郑,如果棧頂不存在就新建并放在棧頂,可以理解為只看棧頂
singleTask 單棧單例模式
如果當(dāng)前返回棧中存在段标,不管是在棧的什么位置力麸,都不會新建可款,會把它上面的全部出棧,它直接顯示在棧頂
singleInstance 獨(dú)棧單例模式
為什么是獨(dú)棧呢?,因?yàn)槿绻麊幽J绞莝ingleInstance 的話克蚂,Android會為當(dāng)前Activity 新建一個(gè)單獨(dú)的棧闺鲸,方便被其他應(yīng)用來調(diào)用,當(dāng)前任務(wù)棧中僅有這一個(gè)Activity
思考:存在跳轉(zhuǎn)邏輯:ActivityA(standard ) 跳轉(zhuǎn)到 ActivityB(singleInstance ) 跳轉(zhuǎn)到 ActivityC(standard )埃叭,按Back鍵摸恍,頁面的顯示邏輯是怎樣的呢?
Android 12 新增的啟動模式singleInstancePerTask
singleInstancePerTask 每個(gè)任務(wù)的單例模式
Android12新增的對于singleInstancePerTask描述如下:
<!-- The activity can only be running as the root activity of the task, the first activity
that created the task, and therefore there will only be one instance of this activity
in a task. In constrast to the {@code singleTask} launch mode, this activity can be
started in multiple instances in different tasks if the
{@code FLAG_ACTIVITY_MULTIPLE_TASK } or {@code FLAG_ACTIVITY_NEW_DOCUMENT} is set.-->`
<enum name="singleInstancePerTask" value="4" />
百度翻譯:
該活動只能作為任務(wù)的根活動(創(chuàng)建任務(wù)的第一個(gè)活動)運(yùn)行赤屋,
因此任務(wù)中只能有一個(gè)此活動的實(shí)例立镶。與{@code singleTask}啟動模式不同,
如果設(shè)置了{@ccode FLAG_activity_MUNIPLE_TASK}或{@codeFLAG_ACTIVETY_NEW_DOCUMENT}谜慌,
則可以在不同任務(wù)的多個(gè)實(shí)例中啟動此活動
默認(rèn)作用和singleTask相似莺奔,不同的在于singleInstancePerTask不需要設(shè)置一個(gè)不同的taskAffinity即可創(chuàng)建新的Task。
另外結(jié)合Intent.FLAG_ACTIVITY_MULTIPLE_TASK和Intent.FLAG_ACTIVITY_NEW_DOCUMENT令哟,每次啟動了launchMode設(shè)置為“singleInstancePerTask”的Activity都可以創(chuàng)建一個(gè)新的Task恼琼,那么這個(gè)新啟動的Activity自然就是這個(gè)新創(chuàng)建的Task的root Activity。singleInstancePerTask是singleTask的擴(kuò)展屏富,這個(gè)Activity可以有多個(gè)實(shí)例,但是每個(gè)都是所在的Task的root Activity狠半。