Android中四种启动模式,最容易理解的小白教程
說(shuō)起Android中的啟動(dòng)模式,其實(shí)是個(gè)很基礎(chǔ)的內(nèi)容,誰(shuí)都知道是4中啟動(dòng)模式,沒(méi)錯(cuò)分別是以下四種:
1,standard
2,singleTop
3,singleTask
4,singleInstance
關(guān)于高深的純理論說(shuō)明這里就不多做贅述,畢竟文字說(shuō)明太饒人,這里就準(zhǔn)備說(shuō)點(diǎn)簡(jiǎn)單的,能看得見(jiàn)的,現(xiàn)在開(kāi)始吧。
第一種:standard(默認(rèn))
關(guān)于這種模式,大家都知道,就是Android默認(rèn)的啟動(dòng)模式,就是不顯示指定,就是這種模式?,F(xiàn)在有FirstActivity和SecondActivity兩個(gè)界面,代碼里都打印了當(dāng)前實(shí)例和taskId,格式為xx/xx
測(cè)試情景:重復(fù)跳轉(zhuǎn)自己(自己設(shè)置standard)
794為task的Id,前面的為當(dāng)前實(shí)例對(duì)象,可見(jiàn)每次都是新建的,并不是復(fù)用的。@f37d177是第一個(gè)頁(yè)面,一共跳轉(zhuǎn)了三次。同樣退出應(yīng)用也用了三次。
結(jié)論:standard模式下,會(huì)不斷地新建activity實(shí)例,都放入同一個(gè)task中
第二種:singleTop
測(cè)試情景一:重復(fù)跳轉(zhuǎn)自己(自己設(shè)置singleTop)
看起來(lái)好像沒(méi)有點(diǎn)擊一樣,其實(shí)是點(diǎn)擊了的,注意看Actionbar上的點(diǎn)擊計(jì)數(shù),點(diǎn)擊了3次,三次的實(shí)例和taskId都是沒(méi)有變化的,且最后退出應(yīng)用就用了一次點(diǎn)擊,如下圖:
測(cè)試情景二:循環(huán)跳轉(zhuǎn)到目標(biāo)頁(yè)面(SecondActivity設(shè)置singleTop)
可以看到兩次跳轉(zhuǎn)到SecondActivity時(shí),實(shí)例都不一樣,且最后返回到桌面也是和進(jìn)入的次數(shù)一樣多。這里進(jìn)入了兩次SecondActivity,且最終從SecondActivity退出應(yīng)用,一共用了4次,如下圖
結(jié)論:顧名思義,singleTop,如果當(dāng)前實(shí)例在當(dāng)前的task的棧頂,則直接復(fù)用,測(cè)試情景一;如果當(dāng)前實(shí)例不再棧頂,則新建實(shí)例,如測(cè)試情景二,因?yàn)槊看味际菑腇irstActivity跳轉(zhuǎn)到SecondActivity的,雖然第二次跳轉(zhuǎn)到SecondActivity的時(shí)候已經(jīng)存在了SecondActivity實(shí)例,可是因?yàn)椴辉跅m?#xff0c;所以又新建了一個(gè)SecondActivity實(shí)例。
第三種:singleTask
測(cè)試情景一:重復(fù)跳轉(zhuǎn)自己(自己設(shè)置singleTask)
跳轉(zhuǎn)了自己4次,可以看到實(shí)例和taskId都是沒(méi)有變化,且最后一次就能退出應(yīng)用,如下圖:
測(cè)試情景二:循環(huán)跳轉(zhuǎn)到目標(biāo)頁(yè)面(SecondActivity設(shè)置singleTask)
這里我們注意到一開(kāi)始FirstActivity的實(shí)例為a2c5349,然后跳轉(zhuǎn)到SecondActivity一直都是5d5dd2a,而且taskId兩個(gè)界面也是一致的,最后在SecondActivity按了一次返回鍵,這里直接返回到了最初的5349實(shí)例界面,也就是第一個(gè)界面,如下圖:
結(jié)論:設(shè)置了singleTask的頁(yè)面,只要是task中有這個(gè)實(shí)例,就會(huì)一直復(fù)用,而且每次復(fù)用這個(gè)已存在的實(shí)例,都會(huì)清空上面的其他實(shí)例(這里的FirstActivity),將自己直接提升到棧頂位置,也就是顯示自己
第四種:singleInstance
測(cè)試情景一:重復(fù)跳轉(zhuǎn)自己(自己設(shè)置singleInstance)
跳轉(zhuǎn)了5次,但是可以發(fā)現(xiàn)實(shí)例和task的值都沒(méi)有變化,退出應(yīng)用也只是一次退出,如下圖:
測(cè)試情景二:循環(huán)跳轉(zhuǎn)到目標(biāo)頁(yè)面(SecondActivity設(shè)置singleInstance)
可以看到一開(kāi)始從FirstActivity跳轉(zhuǎn)跳轉(zhuǎn)到SecondActivity的時(shí)候,taskId發(fā)生了變化,FirstActivity的id是863,但是跳轉(zhuǎn)到SecondActivity的時(shí)候變成了864,然后后面每次跳轉(zhuǎn)到SecondActivity的時(shí)候?qū)嵗蛅ask的id都是沒(méi)有變化;說(shuō)說(shuō)返回的場(chǎng)景
如果最后從FirstActivity返回,那么會(huì)把之前壓入棧的FirstActivity全部返回完之后才是SecondActivity頁(yè)面,然后一次就能退出應(yīng)用;
如果最后從SecondActivity頁(yè)面返回,那么一次就回到FirstActivity,然后把之前壓入棧的FirstActivity全部返回完就退出了應(yīng)用;
壓入棧的如下圖所示:
結(jié)論:設(shè)置了singleInstance的頁(yè)面,初始時(shí)都是新建一個(gè)task棧給這個(gè)頁(yè)面,然后后面一直復(fù)用這個(gè)棧內(nèi)的頁(yè)面。注意,只有這種模式會(huì)新建一個(gè)棧給初始化的頁(yè)面。最后返回的規(guī)律是,先把本頁(yè)面所在的棧頭出完,然后再出下一個(gè)棧的每個(gè)頁(yè)面。
至此,四種模式簡(jiǎn)單分析完畢,希望能給大家一個(gè)直觀的理解
上一篇:IDEA或者AS 中關(guān)于Git的常用操作
轉(zhuǎn)載于:https://juejin.im/post/5b9a2c8fe51d450e5766da88
總結(jié)
以上是生活随笔為你收集整理的Android中四种启动模式,最容易理解的小白教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Hopfield神经网络和TSP问题
- 下一篇: 耕牛传媒关于诈骗,拖延工期等负面信息特别