Activity代碼中的啟動(dòng)標(biāo)志取值與說(shuō)明

android 中,在使用Intent啟動(dòng)Activity時(shí),我們可以使用兩種方式對(duì)于Activity的啟動(dòng)模式進(jìn)行規(guī)定,最常用的是在manifest文件中聲明,Activity的啟動(dòng)模式分為四類:

activity啟動(dòng)之后會(huì)放入任務(wù)棧中,任務(wù)棧遵循后進(jìn)先出的原則,

1)standard? 標(biāo)準(zhǔn)模式,使用該啟動(dòng)模式時(shí),每次都會(huì)新創(chuàng)建activity實(shí)例,并加入到任務(wù)棧中,新創(chuàng)建的activity都置于棧頂。

2)singleTop? 模式,使用該啟動(dòng)模式時(shí),如果要啟動(dòng)的activity剛好位于棧頂,則不需要重新創(chuàng)建activity實(shí)例,會(huì)復(fù)用該棧頂實(shí)例,并且調(diào)用onNewIntent方法重啟該activity。

3)singleTask 模式,使用該啟動(dòng)模式時(shí),當(dāng)啟動(dòng)目標(biāo)activity時(shí),需要查看當(dāng)前任務(wù)棧中是否存在目標(biāo)Activity實(shí)例,如果存在,會(huì)將此Activity置于棧頂,原先在該activity上方的activity都會(huì)被移出任務(wù)棧。

4)singleInstance模式,使用該啟動(dòng)模式時(shí),當(dāng)啟動(dòng)目標(biāo)activity時(shí),查看目標(biāo)activity是否存在,如果不存在,則需要新創(chuàng)建一個(gè)任務(wù)棧,并將這個(gè)activity單獨(dú)放入這個(gè)棧中,如果目標(biāo)activity存在,則直接調(diào)用相應(yīng)任務(wù)棧中的相應(yīng)的activity。

了解了manifest中的啟動(dòng)模式規(guī)則,就不得不提到,如何在代碼中設(shè)置activity的啟動(dòng)模式。

代碼中設(shè)置啟動(dòng)模式的方法就是,通過(guò)給intent設(shè)置flag屬性,進(jìn)而達(dá)到控制啟動(dòng)模式的目的,下面了解一下幾種常見的flag,與他們?cè)诖a中的取值與說(shuō)明。

(1)Intent.FLAG_ACTIVITY_NEW_TASK? ? ? ?開啟一個(gè)新任務(wù),flags默認(rèn)該值,該值類似于lanchMode="standard",不同之處在于,如果原來(lái)不存在活動(dòng)棧, FLAG_ACTIVITY_NEW_TASK 就會(huì)創(chuàng)建一個(gè)新棧。

(2)Intent.FLAG_ACTIVITY_SINGLE_TOP? ? ? ?當(dāng)棧頂為待跳轉(zhuǎn)的activity實(shí)例時(shí),重用棧頂?shù)膶?shí)例,該值等同于lanchMode="singleTop"。

(3)Intent.FLAG_ACTIVITY_CLEAR_TOP? ? ? ? 當(dāng)棧中存在待跳轉(zhuǎn)的Activity實(shí)例時(shí),重新創(chuàng)建一個(gè)新實(shí)例,并將原實(shí)例上方的所有實(shí)例加以清除,該值與 lanchMode="singleTask" 類似,但是 lanchMode="singleTask" 采用onNewIntent啟用原任務(wù),而 FLAG_ACTIVITY_CLEAR_TOP? ? 采用先onDestroy再onCreate創(chuàng)建新任務(wù)。

(4)Intent.FLAG_ACTIVITY_NO_HISTORY? ? ? ? 該標(biāo)志與lanchMode="standard"類似,但是棧中不保存新啟動(dòng)的activity實(shí)例,這樣下次無(wú)論以何種方式再啟動(dòng)該實(shí)例,也要走standard完整流程。

(5)Intent.FLAG_ACTIVITY_CLEAR_TASK? ? ? ? 該標(biāo)志非常暴力,跳轉(zhuǎn)到新頁(yè)面時(shí),棧中的所有實(shí)例被清空,注意,該標(biāo)志需要結(jié)合 FLAG_ACTIVITY_NEW_TASK 使用,即setFlags的參數(shù)為 Intent.FLAG_ACTIVITY_CLEAR_TASK| Intent.FLAG_ACTIVITY_NEW_TASK 。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容