Activity啟動(dòng)模式

Android開發(fā)中我們打交道最多的Activity,這里說下對(duì)Activity4種啟動(dòng)模式的簡(jiǎn)單總結(jié)

Standard:

這是Activity啟動(dòng)的默認(rèn)模式,啟動(dòng)一個(gè)activity便是建一個(gè)新的activity對(duì)象,往task里塞。

SingleTop:

在該啟動(dòng)模式下,當(dāng)啟動(dòng)一個(gè)activity時(shí),比如啟動(dòng)ActivityA,如果task中已經(jīng)存在ActivityA實(shí)例且在棧頂,則直接使用該實(shí)例而不是新建一個(gè)實(shí)例,其他情況更Standard模式相同

SingleTask:

該模式的意思是在同一個(gè)task中只存在一個(gè)實(shí)例,比如啟動(dòng)ActivityA,如果task中已經(jīng)存在ActivityA實(shí)例,則直接使用該實(shí)例而不是新建一個(gè)實(shí)例,如果此時(shí)該實(shí)例不是在棧頂,則會(huì)清空在該實(shí)例以上的activity

SingleInstance:

該模式是強(qiáng)化的SingleTask模式,意思是在任何時(shí)候都只能有一個(gè)Activity實(shí)例。

此外,還有其他幾個(gè)可以干擾到activity啟動(dòng)方式的flag,如果xml里注冊(cè)的activity已經(jīng)填寫了啟動(dòng)模式,而代碼里又為啟動(dòng)activity添加了flag時(shí),如果存在沖突,則flag會(huì)覆蓋xml里的啟動(dòng)模式的部分功能,但并不是完全互斥

FLAG_ACTIVITY_NEW_TASK:

該flag的作用跟SingleTask十分相似,也是同一個(gè)task中只會(huì)存在一個(gè)activity實(shí)例,可以在xml里填寫taskAffinity屬性指定activity需要的task,但與SingleTask不同的一點(diǎn)在于:?jiǎn)斡么薴lag,如果此時(shí)該實(shí)例不是在棧頂,也不會(huì)清空在該實(shí)例以上的activity(配合FLAG_ACTIVITY_CLEAR_TOP可以,但跟SingleTask仍存在不同之處)

FLAG_ACTIVITY_CLEAR_TOP:

使用該flag啟動(dòng)activity,如果task中存在activityA實(shí)例,則會(huì)直接使用該activityA實(shí)例,并清空task中在該實(shí)例以上的activity(如果該activity在xml里使用的模式是Standard,則會(huì)清空包括該activityA實(shí)例在內(nèi)以上的activity,然后使用新的activityA實(shí)例)

FLAG_ACTIVITY_SINGLE_TOP:

該flag作用同SignleTop模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容