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