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