Activity 啟動(dòng)方式

Activity 是 Android 的四大組件之一,在 Android 系統(tǒng)中是通過(guò)棧的方式對(duì)多個(gè) Activity 進(jìn)行管理款违。啟動(dòng)方式?jīng)Q定了 Android 系統(tǒng)在啟動(dòng)一個(gè) Activity 時(shí),對(duì)棧該進(jìn)行什么樣的操作。

Activity 啟動(dòng)方式

standard方式

如果不在manifest文件中聲明 activity 的 launchmode,默認(rèn)就是 standard 類(lèi)型压怠。這種類(lèi)型很簡(jiǎn)單粗暴,每次新建一個(gè) activity飞苇,都會(huì)在棧頂重新創(chuàng)建一個(gè)新的 activity菌瘫,優(yōu)點(diǎn)是簡(jiǎn)單,每次都用新的布卡,缺點(diǎn)是耗資源雨让。

singleTop 方式

之所以除了 standard 類(lèi)型都帶有 single 的前綴,google 應(yīng)該是想說(shuō)明其他幾種方式都有單例模式的影子忿等,singleTop如其名栖忠,在將要運(yùn)行一個(gè) activity 時(shí),先看看棧頂?shù)腶ctivity是不是要運(yùn)行的那個(gè)贸街,如果是就不建新的了庵寞,直接用,如果不是薛匪,就建一個(gè)新的放到棧頂捐川。暫時(shí)沒(méi)想到應(yīng)用場(chǎng)景,activity 自己調(diào)自己的時(shí)候多么逸尖,不然一樣要新建 activity古沥。

singleTask 方式

這個(gè)狠,運(yùn)行一個(gè) activity 之前娇跟,先看棧里面有沒(méi)有這個(gè) activity岩齿,沒(méi)有的話,新建一個(gè)放到棧頂苞俘,有盹沈,直接拉到棧頂用,而且秒殺原來(lái)在它上面的所有 activity吃谣,有點(diǎn)像拉大車(chē)乞封,優(yōu)點(diǎn)是省資源,而且如果一個(gè) app 需要在從 home 頁(yè)進(jìn)去n層深的頁(yè)面一下子會(huì)到 home 頁(yè)基协,按返回鍵直接退出客戶(hù)端歌亲,你就用它吧菇用。

singleInstance 方式

這種類(lèi)型的 activity 在運(yùn)行后會(huì)被安排到單間澜驮,除了第一次創(chuàng)建的時(shí)候調(diào)用 oncreate,后面不會(huì)再調(diào)惋鸥,但是會(huì)調(diào)用 onNewIntent 杂穷。網(wǎng)上的技術(shù)文章都說(shuō)像是瀏覽器悍缠,確實(shí)有點(diǎn)像,就這么理解吧耐量。
但是發(fā)現(xiàn)聲明成 singleInstance 類(lèi)型的 activity 中調(diào)用 startActivityForResult方法有問(wèn)題飞蚓,會(huì)瞬間返回一個(gè) resultcode = 0 的錯(cuò)誤結(jié)果,從 log 看廊蜒,應(yīng)該是在啟動(dòng)另一個(gè) activity 之前就返回了趴拧,可見(jiàn)startActivityForResult在此類(lèi)享受單間待遇的 activity 中已經(jīng)變成不確定因素了,所以最好別用山叮。根本原因未知著榴,還在調(diào)查中。

Intent 的常用 Flag 參數(shù)

FLAG_ACTIVITY_CLEAR_TOP

例如現(xiàn)在的棧情況為:A B C D 屁倔。D此時(shí)通過(guò) intent 跳轉(zhuǎn)到B脑又,如果這個(gè) intent 添加 FLAG_ACTIVITY_CLEAR_TOP 標(biāo)記,則棧情況變?yōu)椋篈 B锐借。如果沒(méi)有添加這個(gè)標(biāo)記问麸,則棧情況將會(huì)變成:A B C D B。也就是說(shuō)钞翔,如果添加了 FLAG_ACTIVITY_CLEAR_TOP 標(biāo)記严卖,并且目標(biāo)Activity 在棧中已經(jīng)存在,則將會(huì)把位于該目標(biāo) activity 之上的 activity 從棧中彈出銷(xiāo)毀嗅战。這跟上面把B的 Launch mode 設(shè)置成 singleTask 類(lèi)似妄田。

FLAG_ACTIVITY_NEW_TASK

例如現(xiàn)在棧1的情況是:A B C。C通過(guò) intent 跳轉(zhuǎn)到D驮捍,并且這個(gè) intent 添加了 FLAG_ACTIVITY_NEW_TASK 標(biāo)記疟呐,如果D這個(gè) Activity 在 Manifest.xml 中的聲明中添加了 Task affinity ,并且和棧1的affinity不同东且,系統(tǒng)首先會(huì)查找有沒(méi)有和D的 Task affinity 相同的 task 棧存在启具,如果有存在,將D壓入那個(gè)棧珊泳,如果不存在則會(huì)新建一個(gè)D的affinity的棧將其壓入鲁冯。如果D的 Task affinity 默認(rèn)沒(méi)有設(shè)置,或者和棧1的 affinity 相同色查,則會(huì)把其壓入棧1薯演,變成:A B C D,這樣就和不加 FLAG_ACTIVITY_NEW_TASK 標(biāo)記效果是一樣的了秧了。 注意如果試圖從非activity的非正常途徑啟動(dòng)一個(gè) activity 跨扮,比如從一個(gè)service中啟動(dòng)一個(gè) activity ,則 intent 比如要添加 FLAG_ACTIVITY_NEW_TASK 標(biāo)記。

FLAG_ACTIVITY_NO_HISTORY

例如現(xiàn)在棧情況為:A B C衡创。C通過(guò) intent 跳轉(zhuǎn)到D帝嗡,這個(gè) intent 添加FLAG_ACTIVITY_NO_HISTORY 標(biāo)志,則此時(shí)界面顯示D的內(nèi)容璃氢,但是它并不會(huì)壓入棧中哟玷。如果按返回鍵,返回到C一也,棧的情況還是:A B C巢寡。如果此時(shí)D中又跳轉(zhuǎn)到E,棧的情況變?yōu)椋篈 B C E椰苟,此時(shí)按返回鍵會(huì)回到C讼渊,因?yàn)镈根本就沒(méi)有被壓入棧中。

FLAG_ACTIVITY_SINGLE_TOP

和上面 Activity 的 Launch mode 的 singleTop 類(lèi)似尊剔。如果某個(gè) intent 添加了這個(gè)標(biāo)志爪幻,并且這個(gè) intent 的目標(biāo) activity 就是棧頂?shù)?activity ,那么將不會(huì)新建一個(gè)實(shí)例壓入棧中须误。

摘自 http://blog.sina.com.cn/s/blog_643d78190101amc7.html

摘自 http://www.cnblogs.com/playing/archive/2011/05/14/2046445.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挨稿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子京痢,更是在濱河造成了極大的恐慌奶甘,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祭椰,死亡現(xiàn)場(chǎng)離奇詭異臭家,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)方淤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)钉赁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人携茂,你說(shuō)我怎么就攤上這事你踩。” “怎么了讳苦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵带膜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鸳谜,道長(zhǎng)膝藕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任咐扭,我火速辦了婚禮芭挽,結(jié)果婚禮上懒棉,老公的妹妹穿的比我還像新娘。我一直安慰自己览绿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布穗慕。 她就那樣靜靜地躺著饿敲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逛绵。 梳的紋絲不亂的頭發(fā)上怀各,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音术浪,去河邊找鬼瓢对。 笑死,一個(gè)胖子當(dāng)著我的面吹牛胰苏,可吹牛的內(nèi)容都是我干的硕蛹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼硕并,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼法焰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起倔毙,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤埃仪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后陕赃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體卵蛉,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年么库,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了傻丝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诉儒,死狀恐怖桑滩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情允睹,我是刑警寧澤运准,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站缭受,受9級(jí)特大地震影響胁澳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜米者,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一韭畸、第九天 我趴在偏房一處隱蔽的房頂上張望宇智。 院中可真熱鬧,春花似錦胰丁、人聲如沸随橘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)机蔗。三九已至,卻和暖如春甘萧,著一層夾襖步出監(jiān)牢的瞬間萝嘁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工扬卷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牙言,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓怪得,卻偏偏與公主長(zhǎng)得像咱枉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子徒恋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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