開始學(xué)習(xí)android的時(shí)候就對(duì)這個(gè)有些難以理解,其實(shí)知識(shí)點(diǎn)也就那么幾點(diǎn)咐柜。
首先Android 有4種啟動(dòng)模式
分別為:standard,singleTask,singleTop,singleInstance号俐。
standard模式 :如果在xml中不加任何配置的話邪乍,默認(rèn)是這種模式缅帘。
1. 什么是standard模式?
第一種情況:比如你現(xiàn)在你從A(Activity) startActivity 跳轉(zhuǎn)到B(Activity),那么B(Activity)會(huì)重新走OnCreate劫流,onStart(),onReume方法巫玻。
第二種情況:比如你現(xiàn)在是在A(Activity),startActviity 跳轉(zhuǎn)到A(Activity)
那么A(Activity)也會(huì)重新走OnCreate,onStart(),onReume方法祠汇。
如果現(xiàn)在你按back鍵仍秤,需要2次才會(huì)退出A(Activity)。
其實(shí)說(shuō)了這么多 可以簡(jiǎn)單的理解為只要是standard模式可很,startActviity之后 就相當(dāng)于重新new Activity 然后添加到容器頂部(stack)诗力。
在棧中的情況如下:
2. 什么是SingleTop模式?
SingleTop和standard很像我抠。唯一和standard不同的是 如果當(dāng)前Activity位于棧頂那么 該Activity不會(huì)被重新創(chuàng)建 會(huì)回調(diào) onNewIntent 方法苇本。
3. 什么是SingleTask模式?
棧內(nèi)復(fù)用模式菜拓,這是一種單例模式圈澈。
如果當(dāng)前壓ABCD,start D , 棧內(nèi)情況還是ABCD
如果當(dāng)前壓ABCDE尘惧,start D , 棧內(nèi)情況是ABCED
第1種情況 AB -> A = BA :
第2種情況 AB - > B = AB:
第3種情況 :
ABC 為同一個(gè)任務(wù)棧 : AB ->C = ABC
ABC 為不同任務(wù)棧 : AB ->C = AB(stack_S1), C (stack_S2)
可以給C 配置(TaskAffinity+singleTask)屬性那么C就是單獨(dú)的任務(wù)棧递递,
注意TaskAffinity 不能 配置為你的包名喷橙,不然就木有意義了。因?yàn)槟J(rèn)stack配置就是包名登舞。
4. 什么是SingleInstance模式贰逾?
單實(shí)例模式。
加強(qiáng)版的singleTask模式菠秒。所有singleTask功能外疙剑,唯一區(qū)別就是只能獨(dú)享一個(gè)任務(wù)棧氯迂。而singleTask 只要多個(gè)Acivity都配置相同的TaskAffinity,那么他們都在同一個(gè)任務(wù)棧中言缤。并只有一個(gè)實(shí)例嚼蚀。
關(guān)于多任務(wù)棧有一個(gè)(彈棧)場(chǎng)景:
2個(gè)棧的情況
S1棧 = A(棧底) B
S2棧 = E(棧底) F
第一種情況:
AB -> 啟動(dòng)F后。
按back鍵管挟,依次彈出 F E, BA
第二種情況:
AB -> 啟動(dòng)E后轿曙。
按back鍵,依次彈出 E , BA
總結(jié)4個(gè)模式之間也很有意思僻孝。
standard + X = singleTop
SingleTop + Y = singleTask
singleTask + Z = singleInstance
X:只要當(dāng)前啟動(dòng)Activity在棧頂 我就不創(chuàng)建导帝。
Y:不管當(dāng)前的Activity在不在棧頂 我都不創(chuàng)建(除非當(dāng)前棧中沒(méi)有啟動(dòng)的Activitiy)。
Z:只要啟動(dòng) Activity我就創(chuàng)建一個(gè)獨(dú)享的任務(wù)棧(只能有一個(gè)activity實(shí)列)穿铆。