Flag是一些常用的標(biāo)志,不同的Flag有不同的用途。例如:
FLAG_ACTIVITY_BROUGHT_TO_FRONT
這個(gè)標(biāo)志一般不是由程序代碼設(shè)置的,如在launchMode中設(shè)置singleTask模式時(shí)系統(tǒng)幫你設(shè)定。
FLAG_ACTIVITY_CLEAR_TOP
如果設(shè)置,并且這個(gè)Activity已經(jīng)在當(dāng)前的Task中運(yùn)行,因此,不再是重新啟動(dòng)一個(gè)這個(gè)Activity的實(shí)例,而是在這個(gè)Activity上方的所有Activity都將關(guān)閉,然后這個(gè)Intent會(huì)作為一個(gè)新的Intent投遞到老的Activity(現(xiàn)在位于頂端)中。 例如,假設(shè)一個(gè)Task中包含這些Activity:A,B,C,D。如果D調(diào)用了startActivity(),并且包含一個(gè)指向Activity B的Intent,那么,C和D都將結(jié)束,然后B接收到這個(gè)Intent,因此,目前stack的狀況是:A,B。 上例中正在運(yùn)行的Activity B既可以在onNewIntent()中接收到這個(gè)新的Intent,也可以把自己關(guān)閉然后重新啟動(dòng)來接收這個(gè)Intent。如果它的啟動(dòng)模式聲明為“multiple”(默認(rèn)值),并且你沒有在這個(gè)Intent中設(shè)置FLAG_ACTIVITY_SINGLE_TOP標(biāo)志,那么它將關(guān)閉然后重新創(chuàng)建;對(duì)于其它的啟動(dòng)模式,或者在這個(gè)Intent中設(shè)置FLAG_ACTIVITY_SINGLE_TOP標(biāo)志,都將把這個(gè)Intent投遞到當(dāng)前這個(gè)實(shí)例的onNewIntent()中。 這個(gè)啟動(dòng)模式還可以與FLAG_ACTIVITY_NEW_TASK結(jié)合起來使用:用于啟動(dòng)一個(gè)Task中的根Activity,它會(huì)把那個(gè)Task中任何運(yùn)行的實(shí)例帶入前臺(tái),然后清除它直到根Activity。這非常有用,例如,當(dāng)從Notification Manager處啟動(dòng)一個(gè)Activity。
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
如果設(shè)置,這將在Task的Activity stack中設(shè)置一個(gè)還原點(diǎn),當(dāng)Task恢復(fù)時(shí),需要清理Activity。也就是說,下一次Task帶著FLAG_ACTIVITY_RESET_TASK_IF_NEEDED標(biāo)記進(jìn)入前臺(tái)時(shí)(典型的操作是用戶在主畫面重啟它),這個(gè)Activity和它之上的都將關(guān)閉,以至于用戶不能再返回到它們,但是可以回到之前的Activity。 這在你的程序有分割點(diǎn)的時(shí)候很有用。例如,一個(gè)e-mail應(yīng)用程序可能有一個(gè)操作是查看一個(gè)附件,需要啟動(dòng)圖片瀏覽Activity來顯示。這個(gè)Activity應(yīng)該作為e-mail應(yīng)用程序Task的一部分,因?yàn)檫@是用戶在這個(gè)Task中觸發(fā)的操作。然而,當(dāng)用戶離開這個(gè)Task,然后從主畫面選擇e-mail app,我們可能希望回到查看的會(huì)話中,但不是查看圖片附件,因?yàn)檫@讓人困惑。通過在啟動(dòng)圖片瀏覽時(shí)設(shè)定這個(gè)標(biāo)志,瀏覽及其它啟動(dòng)的Activity在下次用戶返回到mail程序時(shí)都將全部清除。
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
如果設(shè)置,新的Activity不會(huì)在最近啟動(dòng)的Activity的列表中保存。
FLAG_ACTIVITY_FORWARD_RESULT
如果設(shè)置,并且這個(gè)Intent用于從一個(gè)存在的Activity啟動(dòng)一個(gè)新的Activity,那么,這個(gè)作為答復(fù)目標(biāo)的Activity將會(huì)傳到這個(gè)新的Activity中。這種方式下,新的Activity可以調(diào)用setResult(int),并且這個(gè)結(jié)果值將發(fā)送給那個(gè)作為答復(fù)目標(biāo)的Activity。
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
這個(gè)標(biāo)志一般不由應(yīng)用程序代碼設(shè)置,如果這個(gè)Activity是從歷史記錄里啟動(dòng)的(常按HOME鍵),那么,系統(tǒng)會(huì)幫你設(shè)定。
FLAG_ACTIVITY_MULTIPLE_TASK
不要使用這個(gè)標(biāo)志,除非你自己實(shí)現(xiàn)了應(yīng)用程序啟動(dòng)器。與FLAG_ACTIVITY_NEW_TASK結(jié)合起來使用,可以禁用把已存的Task送入前臺(tái)的行為。當(dāng)設(shè)置時(shí),新的Task總是會(huì)啟動(dòng)來處理Intent,而不管這是是否已經(jīng)有一個(gè)Task可以處理相同的事情。 由于默認(rèn)的系統(tǒng)不包含圖形Task管理功能,因此,你不應(yīng)該使用這個(gè)標(biāo)志,除非你提供給用戶一種方式可以返回到已經(jīng)啟動(dòng)的Task。 如果FLAG_ACTIVITY_NEW_TASK標(biāo)志沒有設(shè)置,這個(gè)標(biāo)志被忽略。
FLAG_ACTIVITY_NEW_TASK
如果設(shè)置,這個(gè)Activity會(huì)成為歷史stack中一個(gè)新Task的開始。一個(gè)Task(從啟動(dòng)它的Activity到下一個(gè)Task中的Activity)定義了用戶可以遷移的Activity原子組。Task可以移動(dòng)到前臺(tái)和后臺(tái);在某個(gè)特定Task中的所有Activity總是保持相同的次序。 這個(gè)標(biāo)志一般用于呈現(xiàn)“啟動(dòng)”類型的行為:它們提供用戶一系列可以單獨(dú)完成的事情,與啟動(dòng)它們的Activity完全無關(guān)。 使用這個(gè)標(biāo)志,如果正在啟動(dòng)的Activity的Task已經(jīng)在運(yùn)行的話,那么,新的Activity將不會(huì)啟動(dòng);代替的,當(dāng)前Task會(huì)簡(jiǎn)單的移入前臺(tái)。參考FLAG_ACTIVITY_MULTIPLE_TASK標(biāo)志,可以禁用這一行為。 這個(gè)標(biāo)志不能用于調(diào)用方對(duì)已經(jīng)啟動(dòng)的Activity請(qǐng)求結(jié)果。
FLAG_ACTIVITY_NO_ANIMATION
如果在Intent中設(shè)置,并傳遞給Context.startActivity()的話,這個(gè)標(biāo)志將阻止系統(tǒng)進(jìn)入下一個(gè)Activity時(shí)應(yīng)用Acitivity遷移動(dòng)畫。這并不意味著動(dòng)畫將永不運(yùn)行——如果另一個(gè)Activity在啟動(dòng)顯示之前,沒有指定這個(gè)標(biāo)志,那么,動(dòng)畫將被應(yīng)用。這個(gè)標(biāo)志可以很好的用于執(zhí)行一連串的操作,而動(dòng)畫被看作是更高一級(jí)的事件的驅(qū)動(dòng)。
FLAG_ACTIVITY_NO_HISTORY
如果設(shè)置,新的Activity將不再歷史stack中保留。用戶一離開它,這個(gè)Activity就關(guān)閉了。這也可以通過設(shè)置noHistory特性。
FLAG_ACTIVITY_NO_USER_ACTION
如果設(shè)置,作為新啟動(dòng)的Activity進(jìn)入前臺(tái)時(shí),這個(gè)標(biāo)志將在Activity暫停之前阻止從最前方的Activity回調(diào)的onUserLeaveHint()。 典型的,一個(gè)Activity可以依賴這個(gè)回調(diào)指明顯式的用戶動(dòng)作引起的Activity移出后臺(tái)。這個(gè)回調(diào)在Activity的生命周期中標(biāo)記一個(gè)合適的點(diǎn),并關(guān)閉一些Notification。 如果一個(gè)Activity通過非用戶驅(qū)動(dòng)的事件,如來電或鬧鐘,啟動(dòng)的,這個(gè)標(biāo)志也應(yīng)該傳遞給Context.startActivity,保證暫停的Activity不認(rèn)為用戶已經(jīng)知曉其Notification。
FLAG_ACTIVITY_REORDER_TO_FRONT
如果在Intent中設(shè)置,并傳遞給Context.startActivity(),這個(gè)標(biāo)志將引發(fā)已經(jīng)運(yùn)行的Activity移動(dòng)到歷史stack的頂端。 例如,假設(shè)一個(gè)Task由四個(gè)Activity組成:A,B,C,D。如果D調(diào)用startActivity()來啟動(dòng)Activity B,那么,B會(huì)移動(dòng)到歷史stack的頂端,現(xiàn)在的次序變成A,C,D,B。如果FLAG_ACTIVITY_CLEAR_TOP標(biāo)志也設(shè)置的話,那么這個(gè)標(biāo)志將被忽略。
FLAG_ACTIVITY_SINGLE_TOP
如果設(shè)置,當(dāng)這個(gè)Activity位于歷史stack的頂端運(yùn)行時(shí),不再啟動(dòng)一個(gè)新的