SingleTask的3個(gè)知識(shí)點(diǎn)

SingleTask作為Android Activity的四個(gè)啟動(dòng)模式之一钥平,啟動(dòng)這種啟動(dòng)模式的Acivity,需要把握3個(gè)知識(shí)點(diǎn)铜秆。說(shuō)明 : 以下內(nèi)容中A是一個(gè)被標(biāo)記為SingleTask的Activity

? ? 1. A“喜歡”(Affinity)的任務(wù)棧在哪里垮媒?

? ? 2.掉起A時(shí)CleanTop了誰(shuí)原杂?

? ? 3.調(diào)起的Activity都在哪個(gè)任務(wù)棧盯拱?

詳細(xì)說(shuō)明:

知識(shí)點(diǎn)1:關(guān)于TaskAffinity的說(shuō)明祥得。

????????我們知道activity被啟動(dòng)后允青,activity會(huì)進(jìn)入任務(wù)棧橄碾。默認(rèn)activity的任務(wù)棧名為應(yīng)用包名,如果想讓activity進(jìn)入另一個(gè)名字的任務(wù)棧,則需要在manifest.xml對(duì)應(yīng)的activity組件節(jié)點(diǎn)下添加android:taskAffinity = “xxx.xxx.xxx”,另外值得說(shuō)明的是,這個(gè)屬性只有在singleTask這個(gè)啟動(dòng)模式下配套使用才有效堪嫂,換句話說(shuō)標(biāo)有standar,singleTop啟動(dòng)模式的activity即使添加了這個(gè)屬性偎箫,啟動(dòng)后仍然和啟動(dòng)它的Activity在同一個(gè)任務(wù)棧,不會(huì)獨(dú)立創(chuàng)建新的任務(wù)棧,把a(bǔ)ctivity實(shí)例放入皆串。(SingleInstance啟動(dòng)模式淹办,作為SingleTask增強(qiáng)版,我們以后再聊它恶复。)下面開(kāi)始說(shuō)說(shuō)任務(wù)棧和SingleTask的那些事兒怜森。

? ? ? ? 當(dāng)一個(gè)Activity要啟動(dòng)A(以下內(nèi)容中A是一個(gè)被標(biāo)記為SingleTask的Activity)時(shí),系統(tǒng)會(huì)先看看這個(gè)A有沒(méi)有自己喜歡谤牡,想要呆的任務(wù)棧副硅。如果沒(méi)有(Manifest.xml中沒(méi)有明確表明taskAffinity)系統(tǒng)就認(rèn)為A想要呆在默認(rèn)的任務(wù)棧中,接下來(lái)就到名字和包名一致的任務(wù)棧中找A的實(shí)例翅萤,沒(méi)找到就創(chuàng)建一個(gè)A的實(shí)例恐疲,壓入棧頂;找到A的實(shí)例套么,那么就把A上面的其它Activity 清除掉(CleanTop)培己,A調(diào)到棧頂。

? ? ? ? 系統(tǒng)如果發(fā)現(xiàn)要啟動(dòng)的A有自己喜歡的任務(wù)棧胚泌,它的名字叫com.example.study省咨,那么系統(tǒng)就就會(huì)去找這個(gè)任務(wù)棧,發(fā)現(xiàn)“誒玷室?居然還沒(méi)有創(chuàng)建”零蓉,那么系統(tǒng)就創(chuàng)建這個(gè)名字叫com.example.study的任務(wù)棧,同時(shí)創(chuàng)建A的實(shí)例穷缤,并把A放到這個(gè)任務(wù)棧里敌蜂;而另一方面,如果系統(tǒng)發(fā)現(xiàn)A喜歡的任務(wù)棧已經(jīng)存在津肛,那么就會(huì)把A從任務(wù)占中翻出來(lái)紊册,放到棧頂,當(dāng)然之前A上面壓的其他Activity就統(tǒng)統(tǒng)被cleanTop掉了快耿。

? ? ? ? Conclusion:調(diào)起SingleTask模式的Activity,第一步找任務(wù)棧芳绩;第二步找實(shí)例掀亥;第三步CleanTop和置頂。

知識(shí)點(diǎn)2:CleanTop了誰(shuí)妥色?

知識(shí)點(diǎn)3:調(diào)起的Activity究竟在哪個(gè)棧搪花?

? ? 這兩點(diǎn)合在一起說(shuō),原因是開(kāi)始看書的時(shí)候我并沒(méi)有太深入思考CleanTop中哪些activity實(shí)例能作為A的top這個(gè)知識(shí)點(diǎn)。后來(lái)在寫demo的時(shí)候有一種情況調(diào)起A后撮竿,任務(wù)棧的結(jié)果和我想的不一樣吮便,所以回頭再琢磨發(fā)現(xiàn)這2個(gè)知識(shí)點(diǎn)被我忽視了。

? ? 要寫的demo是這樣:

? ? ? ? 前提條件闡述:1.A的啟動(dòng)模式是SingleTask幢踏,其他的Activity BC都是standar啟動(dòng)模式髓需;2.A有taskAffinity屬性。3.B上有2個(gè)按鈕房蝉,點(diǎn)擊后能分別調(diào)起A和C僚匆;4.A,C界面分別有1個(gè)按鈕,點(diǎn)擊后可以調(diào)起B(yǎng).

? ? ? ? 操作流程:B點(diǎn)擊按鈕調(diào)起A搭幻,A點(diǎn)擊按鈕調(diào)起B(yǎng)咧擂,B按鈕調(diào)起C,C點(diǎn)擊按鈕調(diào)起B(yǎng)檀蹋,B點(diǎn)擊按鈕調(diào)起A松申,問(wèn)此時(shí)棧和棧里的Activity實(shí)例情況,哈哈哈俯逾。

? ? ? ? 結(jié)果:任務(wù)棧2個(gè):1個(gè)默認(rèn)任務(wù)棧TaskStack1(名稱和應(yīng)用包名一致)1個(gè)是A的taskAffinity指定的任務(wù)棧TaskStack2贸桶;Activity實(shí)例2個(gè):1個(gè)TaskStack1中的B,1個(gè)TaskStack2中的A纱昧。

? ? ? ? ?解釋:Activity刨啸,更嚴(yán)謹(jǐn)?shù)恼f(shuō)以standar,singleTop模式作為launchMode的Activity,調(diào)起它的Activity在哪個(gè)任務(wù)棧识脆,它們的實(shí)例就會(huì)被壓到哪個(gè)任務(wù)棧中设联。所以Demo操作的詳細(xì)流程:“B點(diǎn)擊按鈕調(diào)起A”B在TaskStack1,A在TaskStack2灼捂;“A點(diǎn)擊按鈕調(diào)起B(yǎng)离例,B按鈕調(diào)起C,C點(diǎn)擊按鈕調(diào)起B(yǎng)”悉稠,這一系列操作產(chǎn)生的activity實(shí)例都在TaskStack2宫蛆,此時(shí)TaskStack2的棧內(nèi)情況從下到上一次為ABCB;最后"B點(diǎn)擊按鈕調(diào)起A"的猛,系統(tǒng)先找A喜歡的任務(wù)棧TaskStack2存在嗎耀盗?存在!TaskStack2里有A實(shí)例嗎卦尊?有叛拷!接下來(lái)CleanTop,最后BCB出棧岂却,TaskStack2里僅剩A忿薇。

很有意思裙椭!

最后說(shuō)一下A的生命周期

onCreate----onStart----onResume----。署浩。揉燃。---onPause--(B的onCreate? ?onStart? ?onResume)---onStop--------------------------------------------當(dāng)最后"B點(diǎn)擊按鈕調(diào)起A"------(B的onPause)-----A的onNewIntent---onRestart---onStart----onResume---(B的onStop,onDestroy筋栋,留個(gè)疑問(wèn)炊汤,cleanTop的B onDestroy會(huì)立即執(zhí)行嘛?太晚了二汛,明天驗(yàn)證婿崭!)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肴颊,隨后出現(xiàn)的幾起案子氓栈,更是在濱河造成了極大的恐慌,老刑警劉巖婿着,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件授瘦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡竟宋,警方通過(guò)查閱死者的電腦和手機(jī)提完,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)丘侠,“玉大人徒欣,你說(shuō)我怎么就攤上這事∥献郑” “怎么了打肝?”我有些...
    開(kāi)封第一講書人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)挪捕。 經(jīng)常有香客問(wèn)我粗梭,道長(zhǎng),這世上最難降的妖魔是什么级零? 我笑而不...
    開(kāi)封第一講書人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任断医,我火速辦了婚禮,結(jié)果婚禮上奏纪,老公的妹妹穿的比我還像新娘鉴嗤。我一直安慰自己,他們只是感情好序调,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布躬窜。 她就那樣靜靜地躺著,像睡著了一般炕置。 火紅的嫁衣襯著肌膚如雪荣挨。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,821評(píng)論 1 314
  • 那天朴摊,我揣著相機(jī)與錄音默垄,去河邊找鬼。 笑死甚纲,一個(gè)胖子當(dāng)著我的面吹牛口锭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播介杆,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鹃操,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了春哨?” 一聲冷哼從身側(cè)響起荆隘,我...
    開(kāi)封第一講書人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赴背,沒(méi)想到半個(gè)月后椰拒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凰荚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年燃观,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片便瑟。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缆毁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出到涂,到底是詐尸還是另有隱情脊框,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布养盗,位于F島的核電站缚陷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏往核。R本人自食惡果不足惜箫爷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望聂儒。 院中可真熱鬧虎锚,春花似錦、人聲如沸衩婚。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)非春。三九已至柱徙,卻和暖如春缓屠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背护侮。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工敌完, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人羊初。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓滨溉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親长赞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晦攒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361