Activity棧

Activity棧

android系統(tǒng)使用棧的方式對activity進行管理:

Paste_Image.png

采用后進先出原則赞枕,新訪問的activity放在棧頂宅楞,返回時從棧頂移除activity。棧頂?shù)腶ctivity處于激活狀態(tài),能夠與用戶交互蛤克,其之后的activity處于暫停狀態(tài),但保留了界面組件的當前狀態(tài)夷蚊,返回后又會恢復构挤。

每個activity持有一個屬性taskaffinity(可以在manifest文件中設(shè)置),表示activity之間的相關(guān)性惕鼓,默認activity的taskaffinity為應(yīng)用的包名筋现。

Paste_Image.png

同一個Task下的activity不一定都在一起,中間有可能有其他Task的activity箱歧。

當按“home”鍵后這些任務(wù)會切換到后臺矾飞,點擊桌面對應(yīng)應(yīng)用的icon后,相應(yīng)的任務(wù)又會切換到前臺呀邢。

Paste_Image.png

通過命令行語句:
adb shell dumpsys activity activities
可以查看Activity的相關(guān)信息包括affinity和task

Paste_Image.png
Paste_Image.png

啟動模式之lanchMode

可以在manifest中配置activity的啟動模式lanchMode洒沦,activity支持4中啟動模式:

  • standard
    他是默認模式,在該模式下activity可以擁有多個實例价淌,這些實例可以位于一個或多個task中申眼。
    比如:
    1、在A應(yīng)用中多次啟動standard模式的activity1蝉衣,則會創(chuàng)建多個activity1實例括尸,由于都沒設(shè)置taskaffinity,他們都屬于同一個任務(wù)TaskA病毡。
    2濒翻、在B應(yīng)用中啟動A應(yīng)用的activity1,則這個activity1屬于B應(yīng)用的任務(wù)TaskB。
  • singleTop
    在該模式下肴焊,同一個task中前联,如果存在該Activity實例,并且在棧頂娶眷,則不再創(chuàng)建新的Activity實例似嗤,而是調(diào)用其onNewIntent()方法,否則則創(chuàng)建新的activity實例届宠。
  • singleTask
    表示只容許有一個包含該Activity實例的task存在烁落。
    比如ActivityB的啟動模式為singleTask:
    1、如果activityA和B的taskAffinity一樣豌注,第一次創(chuàng)建ActivityB伤塌,會創(chuàng)建一個新的ActivityB實例,并且屬于同一個Task中轧铁。如果存在ActivityB每聪,則會刪除其之上的所有Activity,然后跳轉(zhuǎn)到ActivityB齿风。
    2药薯、如果activityA和B的taskAffinity不一樣,第一次創(chuàng)建ActivityB救斑,會判斷與B的taskAffinity相關(guān)的Task是否存在童本,不存在則創(chuàng)建新的Task,把ActivityB添加進去脸候,如果存在相關(guān)的Task穷娱,這把ActivityB添加在這個Task中;如果存在ActivityB运沦,則把這個Task中ActivityB之上的Activity都刪除泵额,然后跳轉(zhuǎn)到ActivityB中。
  • singleInstance
    即只允許存在唯一一個Activity實例茶袒,并且該Activity所在的Task只能有他一個Activity實例梯刚。與singleTask類似,只能有一個實例薪寓。跳轉(zhuǎn)到singleInstance模式的Activity亡资,如果不存在,則創(chuàng)建一個task,添加activity向叉;如果存在锥腻,則直接跳到這個activity。

啟動模式之flag

當跳轉(zhuǎn)activity時母谎,可以通過設(shè)置intent的flag瘦黑,設(shè)置activity的跳轉(zhuǎn)模式,flag的優(yōu)先級比manifest中配置的lanchMode更高。
常用的4中flag:

  • FLAG_ACTIVITY_NEW_TASK
    在官方文檔中介紹幸斥,他與lanchMode=singleTask相同匹摇,實際上并不完全一樣,需要與FLAG_ACTIVITY_CLEAR_TOP結(jié)合才與singleTask一樣甲葬。單獨使用會有很多奇怪的現(xiàn)象廊勃,達不到我們的預期。
    比如:
    1经窖、如果跳轉(zhuǎn)的連個ActivityA和B在同一個task中坡垫,F(xiàn)LAG_ACTIVITY_NEW_TASK沒有任何作用,多次用這個flag跳轉(zhuǎn)ActivityB画侣,會創(chuàng)建多個ActivityB實例冰悠。
    2、ActivityA和B的taskAffinity不同配乱,跳轉(zhuǎn)到ActivityB溉卓,A和B在不同的task中,當在ActivityB的Task中搬泥,跳轉(zhuǎn)到同個Task中的ActivityC,再要跳轉(zhuǎn)到ActivityB的诵,會沒有任何反應(yīng)。因為ActivityB實例已存在佑钾,但是他所在的task的棧頂是activityC,F(xiàn)LAG_ACTIVITY_NEW_TASK又不會刪除activityB只上的Activity烦粒,所有沒有發(fā)生跳轉(zhuǎn)休溶。

  • FLAG_ACTIVITY_SINGLE_TOP
    他與lancheMode=singleTop具有想用的的行為。

  • FLAG_ACTIVITY_CLEAR_TOP
    清除activity所在task中扰她,位于該activity之上的所有activity兽掰,如果activity的啟動模式是默認的,則該activity會finished掉徒役,再啟動一個新的activity孽尽;如果不想重新創(chuàng)建一個activity,則要再加上FLAG_ACTIVITY_SINGLE_TOP忧勿。

  • FLAG_ACTIVITY_CLEAR_TASK
    清除已存在Activity所在task中的所有activity,activity將變成一個空棧中新的最底端的activity需要與FLAG_ACTIVITY_NEW_TASK聯(lián)合起來才能使用杉女,不然沒有效果。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸳吸,一起剝皮案震驚了整個濱河市熏挎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晌砾,老刑警劉巖坎拐,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡哼勇,警方通過查閱死者的電腦和手機都伪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來积担,“玉大人陨晶,你說我怎么就攤上這事“跚幔” “怎么了珍逸?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長聋溜。 經(jīng)常有香客問我谆膳,道長,這世上最難降的妖魔是什么撮躁? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任漱病,我火速辦了婚禮,結(jié)果婚禮上把曼,老公的妹妹穿的比我還像新娘杨帽。我一直安慰自己,他們只是感情好嗤军,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布注盈。 她就那樣靜靜地躺著,像睡著了一般叙赚。 火紅的嫁衣襯著肌膚如雪老客。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天震叮,我揣著相機與錄音胧砰,去河邊找鬼。 笑死苇瓣,一個胖子當著我的面吹牛尉间,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播击罪,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼哲嘲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了媳禁?” 一聲冷哼從身側(cè)響起撤蚊,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎损话,沒想到半個月后侦啸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體槽唾,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年光涂,在試婚紗的時候發(fā)現(xiàn)自己被綠了庞萍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡忘闻,死狀恐怖钝计,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情齐佳,我是刑警寧澤私恬,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站炼吴,受9級特大地震影響本鸣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜硅蹦,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一荣德、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧童芹,春花似錦涮瞻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至生音,卻和暖如春艇抠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背久锥。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留异剥,地道東北人瑟由。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像冤寿,于是被迫代替她去往敵國和親歹苦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

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