Android TaskAffinity和allowTaskReparenting屬性

一襟雷、TaskAffinity

TaskAffinity翻譯過(guò)來(lái)就是“任務(wù)相關(guān)性”姿搜,它表示了一個(gè)Activity所需要的任務(wù)棧的名字蛹找。
在平時(shí)的開(kāi)發(fā)中肚豺,我們一般很少使用到TaskAffinity這個(gè)屬性签赃,也沒(méi)有聽(tīng)說(shuō)過(guò)Activity需要什么任務(wù)棧之類(lèi)的谷异。其實(shí)分尸,在默認(rèn)情況下,如果不指定TaskAffinity屬性歹嘹,Activity所需任務(wù)棧的名字就是應(yīng)用的名字箩绍。

1、默認(rèn)的任務(wù)棧

我們?cè)谝粋€(gè)應(yīng)用中啟動(dòng)三個(gè)Activity尺上,然后在Terminal中執(zhí)行adb shell dumpsys activity命令材蛛,結(jié)果如下:

Running activities (most recent first):
      TaskRecord{853dee #503 A=com.hwldzh.myapplication U=0 StackId=1 sz=3}
        Run #4: ActivityRecord{c1a608e u0 com.hwldzh.myapplication/.ThirdActivity t503}
        Run #3: ActivityRecord{7289178 u0 com.hwldzh.myapplication/.SecondActivity t503}
        Run #2: ActivityRecord{8539f65 u0 com.hwldzh.myapplication/.MainActivity t503}

可以看到,啟動(dòng)的三個(gè)Activity都位于“com.hwldzh.application”這個(gè)任務(wù)棧中怎抛,而這個(gè)名字就是我們這個(gè)應(yīng)用的包名卑吭。

2、TaskAffinity初登場(chǎng)

接下來(lái)马绝,我們給ThirdActivity加上TaskAffinity的屬性豆赏,即在Manifest中的聲明如下:

<activity 
      android:name=".ThirdActivity"
      android:taskAffinity="com.hwldzh.ThirdActivity"/>

我們繼續(xù)執(zhí)行在Terminal中執(zhí)行adb shell dumpsys activity命令,看ThirdActivity是否處于“com.hwldzh.ThirdActivity”的任務(wù)棧中:

Running activities (most recent first):
      TaskRecord{853dee #503 A=com.hwldzh.myapplication U=0 StackId=1 sz=3}
        Run #4: ActivityRecord{c1a608e u0 com.hwldzh.myapplication/.ThirdActivity t503}
        Run #3: ActivityRecord{7289178 u0 com.hwldzh.myapplication/.SecondActivity t503}
        Run #2: ActivityRecord{8539f65 u0 com.hwldzh.myapplication/.MainActivity t503}

可以看到ThirdActivity依然運(yùn)行在以包名為名字的任務(wù)棧中富稻。這說(shuō)明了在啟動(dòng)模式為Standard下掷邦,單獨(dú)使用TaskAffinity屬性是無(wú)效的

3椭赋、TaskAffinity和SingleTask配合

我們?cè)赥hirdActivity的Manifest聲明中加上SingleTask啟動(dòng)模式:

<activity
      android:name=".ThirdActivity"
      android:launchMode="singleTask"
      android:taskAffinity="com.hwldzh.ThirdActivity"/>

然后執(zhí)行adb shell dumpsys activity命令抚岗,得到如下結(jié)果:

Running activities (most recent first):
      TaskRecord{5da8e4c #25630 A=com.hwldzh.ThirdActivity U=0 StackId=1 sz=1}
        Run #7: ActivityRecord{1111a92 u0 com.hwldzh.myapplication/.ThirdActivity t25630}
      TaskRecord{b00bc91 #25629 A=com.hwldzh.myapplication U=0 StackId=1 sz=2}
        Run #6: ActivityRecord{93040cf u0 com.hwldzh.myapplication/.SecondActivity t25629}
        Run #5: ActivityRecord{464be1f u0 com.hwldzh.myapplication/.MainActivity t25629}

在將ThirdActivity的啟動(dòng)模式改為SingleTask之后,可以看到ThirdActivity啟動(dòng)的時(shí)候創(chuàng)建了一個(gè)新的任務(wù)棧哪怔,并且該任務(wù)棧的名字為T(mén)askAffinity屬性設(shè)置的“com.hwldzh.ThirdActivity”宣蔚。

所以,當(dāng)TaskAffinity和SingleTask啟動(dòng)模式配對(duì)使用時(shí)认境,它是具有該模式的Activity的目前任務(wù)棧的名字胚委,待啟動(dòng)的Activity會(huì)運(yùn)行在名字和TaskAffinity相同的任務(wù)棧中。

二元暴、allowTaskReparenting

allowTaskReparenting屬性的作用是Activity的遷移篷扩。當(dāng)allowTaskReparenting屬性和TaskAffinity配合使用時(shí),Activity可以從一個(gè)任務(wù)棧遷移到另一個(gè)任務(wù)棧茉盏。

遷移的規(guī)則是:從一個(gè)與該Activity TaskAffinity屬性不同的任務(wù)棧中遷移到與它TaskAffinity相同的任務(wù)棧中鉴未。

舉個(gè)例子:當(dāng)一個(gè)應(yīng)用A啟動(dòng)了應(yīng)用B的某個(gè)Activity后,如果這個(gè)Activity的allowTaskReparenting屬性設(shè)置為true鸠姨,那么當(dāng)應(yīng)用B被啟動(dòng)铜秆,此Activity會(huì)直接從應(yīng)用A的任務(wù)棧轉(zhuǎn)移到應(yīng)用B的任務(wù)棧中。
具體點(diǎn)來(lái)說(shuō)讶迁,現(xiàn)在有兩個(gè)應(yīng)用A和B连茧,A啟動(dòng)了B的一個(gè)Activity C,然后按Home鍵回到桌面,然后再單擊B的桌面圖標(biāo)啸驯,這個(gè)時(shí)候不是啟動(dòng)了B的主Activity客扎,而是重新顯示了已經(jīng)被應(yīng)用A啟動(dòng)的Activity C。我們也可以理解為罚斗,C從A的任務(wù)棧轉(zhuǎn)移到了B的任務(wù)棧中徙鱼。
可以這么理解,由于A啟動(dòng)了C针姿,這個(gè)時(shí)候C只能運(yùn)行在A的任務(wù)棧中袱吆,但是C屬于B應(yīng)用,正常情況下距淫,它的TaskAffinity值肯定不可能和A的任務(wù)棧相同绞绒,所以當(dāng)B啟動(dòng)后,B會(huì)創(chuàng)建自己的任務(wù)棧榕暇,這個(gè)時(shí)候系統(tǒng)發(fā)現(xiàn)C原本想要的任務(wù)棧已經(jīng)創(chuàng)建了蓬衡,所以就把C從A的任務(wù)棧中轉(zhuǎn)移過(guò)來(lái)了。

參考書(shū)目

1拐揭、《Android開(kāi)發(fā)藝術(shù)探索》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撤蟆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子堂污,更是在濱河造成了極大的恐慌家肯,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盟猖,死亡現(xiàn)場(chǎng)離奇詭異讨衣,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)式镐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)反镇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人娘汞,你說(shuō)我怎么就攤上這事歹茶。” “怎么了你弦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵惊豺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我禽作,道長(zhǎng)尸昧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任旷偿,我火速辦了婚禮烹俗,結(jié)果婚禮上爆侣,老公的妹妹穿的比我還像新娘。我一直安慰自己幢妄,他們只是感情好兔仰,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著磁浇,像睡著了一般斋陪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上置吓,一...
    開(kāi)封第一講書(shū)人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音缔赠,去河邊找鬼衍锚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嗤堰,可吹牛的內(nèi)容都是我干的戴质。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼踢匣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼告匠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起离唬,我...
    開(kāi)封第一講書(shū)人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤后专,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后输莺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體戚哎,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年嫂用,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了型凳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘱函,死狀恐怖甘畅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情往弓,我是刑警寧澤疏唾,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站亮航,受9級(jí)特大地震影響荸实,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缴淋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一准给、第九天 我趴在偏房一處隱蔽的房頂上張望泄朴。 院中可真熱鬧,春花似錦露氮、人聲如沸祖灰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)局扶。三九已至,卻和暖如春叁扫,著一層夾襖步出監(jiān)牢的瞬間三妈,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工莫绣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畴蒲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓对室,卻偏偏與公主長(zhǎng)得像模燥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掩宜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

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