andorid 启动模式面试题
?
現(xiàn)在有四個(gè)activity a,b,c,d ,設(shè)置a為標(biāo)準(zhǔn)模式,b為singletop模式 c設(shè)置singletask模式,d設(shè)置SingleInstance?模式
a啟動(dòng)b ,b 啟動(dòng) c ,c啟動(dòng)d 然后d啟動(dòng)a ,a在啟動(dòng)b ,b啟動(dòng)c ,c再啟動(dòng)d?
那么此時(shí)棧中有幾個(gè)activity ?
當(dāng)然 這些模式也可以隨意設(shè)置或者啟動(dòng)順序改變,問棧中有幾個(gè)activity ,
在想這類問題的時(shí)候需要清除四種啟動(dòng)模式,在回到這個(gè)問題的時(shí)候先了解下啟動(dòng)模式
?
1?standard(默認(rèn)) 默認(rèn)啟動(dòng)模式
每次啟動(dòng)一個(gè)Activity都會(huì)創(chuàng)建一個(gè)新的實(shí)例,并放入棧頂位置。也就說會(huì)不斷地新建activity實(shí)例,都放入同一個(gè)task中
2?singleTop?棧頂復(fù)用模式
如果啟動(dòng)的Activity已經(jīng)位于任務(wù)棧的棧頂,就不會(huì)重新創(chuàng)建實(shí)例,而是調(diào)用onNewIntent(intent)方法。反之創(chuàng)建新的實(shí)例加入棧中。 解釋:這個(gè)是看棧頂有沒有activitiy 有的話就直接使用,沒有的就和默認(rèn)模式一樣了,先創(chuàng)建一個(gè)放在棧頂,
3?singleTask棧內(nèi)復(fù)用模式?
只要該Activity在一個(gè)任務(wù)棧中存在,就不會(huì)重新創(chuàng)建新的實(shí)例。并把棧中在其之上的其他Activity Destroy掉,調(diào)用onNewIntent(intent)方法。如果不存在,創(chuàng)建新的實(shí)例并入棧。
解釋:這個(gè)模式創(chuàng)建的時(shí)候會(huì)先看棧是否存在活動(dòng)的實(shí)例,有的話會(huì)把該activity上的所有活動(dòng)毀掉,沒有的話直接創(chuàng)建一個(gè)
4?singleInstance單實(shí)例模式
Activity只能單獨(dú)位于一個(gè)任務(wù)棧中,并且這個(gè)任務(wù)棧只存在這一個(gè)實(shí)例。
?解釋:這個(gè)是全局單例模式,自己還單獨(dú)占一個(gè)棧,下次使用的時(shí)候直接調(diào)用即可,
這個(gè)模式一般用在系統(tǒng)應(yīng)用中比如鎖屏等,一般我們寫的app中很少用到,我工作好多年從來沒有設(shè)置過,好尷尬,可能自己
知識(shí)點(diǎn)不足,還需要多加努力學(xué)習(xí),
清楚了這些啟動(dòng)模式,現(xiàn)在回答下剛開始的面試題
首先第一啟動(dòng)的時(shí)候無論設(shè)置怎么由于棧中都沒有 ,所以首先會(huì)創(chuàng)建一個(gè),重點(diǎn)就是
在來一次啟動(dòng)
記錄下此時(shí)的棧的activity?
畫一個(gè)草圖記錄一下
a->b->c->d
之后d->a
此時(shí)c 位于棧頂 a設(shè)置的默認(rèn)模式此時(shí)a會(huì)創(chuàng)建 如下圖
之后d->a->b?
此時(shí)a位于棧頂 ,b設(shè)置的棧頂模式, 但是由于棧頂不是b所以會(huì)在此創(chuàng)建b 如下圖
之后再d->a->b->c
此時(shí)b位于棧頂,c設(shè)置的棧內(nèi)復(fù)用模式 ,c會(huì)把它之上的活動(dòng)銷毀掉 此時(shí)如下
之后再d->a->b->c->d?
此時(shí)c位于棧頂,d設(shè)置的是singleInstance 棧中有了d的存在,不會(huì)再重新創(chuàng)建了
效果圖和上面的圖一樣
2次啟動(dòng)之后棧 中的活動(dòng)有a,b,c,d
自己測(cè)試的效果如下
測(cè)試效果和自己猜測(cè)的一樣,??
為了驗(yàn)證這次我點(diǎn)擊手機(jī)的返回鍵,看看效果的是否是四個(gè)activity
果然棧中此時(shí)之后四個(gè)activity,?
無論這類面試題設(shè)置什么模式,細(xì)心想想,還是很簡(jiǎn)單的,這四種模式別弄錯(cuò)了
如果回答正確了, 有人可能換回再問?
b在此啟動(dòng)c的時(shí)候由于c沒有創(chuàng)建那么它怎樣傳遞數(shù)據(jù),?
,若果你想到了,說明我上面的四種啟動(dòng)模式,您認(rèn)真看了,沒有想到可能還需要在看看?
答案是onNewIntent 傳遞數(shù)據(jù).,,,
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的andorid 启动模式面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黄金蜜瓜和白玉甜瓜哪个好吃
- 下一篇: Java 反射 (快速了解反射)