Activity一共有以下四種launchMode:
1.standard
系統(tǒng)默認(rèn)的模式玩焰,默認(rèn)情況下焦人,都創(chuàng)建一個(gè)新的activity出來阶祭,不管是不是相同的類,都創(chuàng)建一個(gè)新的勒奇。
2.singleTop
該模式啟動(dòng)時(shí)预鬓,會(huì)先判斷當(dāng)前棧頂?shù)腶ctivity是不是intent要跳轉(zhuǎn)的類型,如果是赊颠,則跳到棧頂?shù)倪@個(gè)activity對(duì)象格二,如果棧頂?shù)腶ctivity對(duì)象不是intent要跳轉(zhuǎn)的類型,就創(chuàng)建一個(gè)新的activity對(duì)象竣蹦。
當(dāng)從SecondActivity跳轉(zhuǎn)到FirstActivity時(shí)顶猜,系統(tǒng)發(fā)現(xiàn)存在有FirstActivity實(shí)例,但不是位于棧頂,于是重新生成一個(gè)實(shí)例痘括。
這就是singleTop啟動(dòng)模式长窄,如果發(fā)現(xiàn)有對(duì)應(yīng)的Activity實(shí)例正位于棧頂,則重復(fù)利用纲菌,不再生成新的實(shí)例挠日。
3.singleTask
該模式啟動(dòng)時(shí),會(huì)檢測棧內(nèi)是否存在相同類型的activity對(duì)象翰舌,如果存在嚣潜,就把該activity以上的activity對(duì)象全部清除,并把a(bǔ)ctivity對(duì)象變?yōu)闂m攲?duì)象椅贱;但是如果棧內(nèi)沒有相同的activity對(duì)象懂算,則在棧頂啟動(dòng)一個(gè)新的activity對(duì)象。
我們注意到庇麦,SecondActivity消失了计技,沒錯(cuò),在這個(gè)跳轉(zhuǎn)過程中系統(tǒng)發(fā)現(xiàn)有存在的FirstActivity實(shí)例山橄,于是不再生成新的實(shí)例垮媒,而是將FirstActivity之上的Activity實(shí)例統(tǒng)統(tǒng)出棧,將FirstActivity變?yōu)闂m攲?duì)象驾胆,顯示到幕前涣澡。
這就是singleTask模式,如果發(fā)現(xiàn)有對(duì)應(yīng)的Activity實(shí)例丧诺,則使此Activity實(shí)例之上的其他Activity實(shí)例統(tǒng)統(tǒng)出棧入桂,使此Activity實(shí)例成為棧頂對(duì)象,顯示到幕前驳阎。
例如抗愁,在IM里面的使用馁蒂;當(dāng)從聊天窗口點(diǎn)擊頭像跳轉(zhuǎn)到用戶詳情頁,從用戶詳情頁或進(jìn)入更深的頁面后蜘腌,再點(diǎn)擊聊天按鈕重新進(jìn)入聊天室沫屡,聊天室這個(gè)Acitivity上面的其他Activity都被清空了,就是使用的這種模式撮珠。
但是沮脖,像進(jìn)入登錄頁面的這種情況;如芯急,登陸后關(guān)閉登錄頁勺届,進(jìn)入主頁或進(jìn)入更深的頁面,然后退出登錄后娶耍,退到登錄頁面免姿,需要關(guān)閉其他的所有打開的頁面,這里就不能套用這些登錄模式榕酒,需要自己手動(dòng)去關(guān)閉原來的所有頁面胚膊。
4.singleInstance
它會(huì)啟用一個(gè)新的棧結(jié)構(gòu),將Acitvity放置于這個(gè)新的棧結(jié)構(gòu)中想鹰,并保證不再有其他Activity實(shí)例進(jìn)入紊婉。
singleInstance啟動(dòng)模式可能是最復(fù)雜的一種模式,為了幫助大家理解杖挣,我舉一個(gè)例子肩榕,假如我們有一個(gè)share應(yīng)用,其中的ShareActivity是入口Activity惩妇,也是可供其他應(yīng)用調(diào)用的Activity,我們把這個(gè)Activity的啟動(dòng)模式設(shè)置為singleInstance筐乳,然后在其他應(yīng)用中調(diào)用歌殃。
轉(zhuǎn)載地址:
基礎(chǔ)總結(jié)篇之二:Activity的四種launchMode