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模式