Android初级开发笔记-- activity启动模式的学习(1)
第一次學(xué)習(xí)Android中一個很重要的概念,啟動模式。文章記錄的也只是一些入門知識,隨著學(xué)習(xí)的深入還會有activity啟動模式的學(xué)習(xí)(2)和(3)。 下面分三個小點(diǎn)說一下對啟動模式的理解區(qū)別以及如何設(shè)置。
預(yù)備知識
(1)activity是以任務(wù)棧的方式進(jìn)行管理的,棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),棧中的activity只能通過出棧和壓棧的方式改變順序。 (2)啟動一個application的時候,系統(tǒng)會默認(rèn)創(chuàng)建一個任務(wù)棧,默認(rèn)啟動的activity都在同一個任務(wù)棧中。當(dāng)啟動另一個應(yīng)用,之前那個任務(wù)棧就會被移到后臺,成為后臺任務(wù)棧,而剛啟動的那個任務(wù)棧就被調(diào)到前臺,成為前臺任務(wù)棧。在用戶面前顯示的始終是前臺任務(wù)棧中的棧頂activity。
對四種啟動模式的理解
Android里面說的啟動模式其實就是activity的啟動方式。 有下面四種
- standard(默認(rèn))
- singleTop(棧頂復(fù)用)
- singleTask(棧內(nèi)復(fù)用)
- singleInstance(單例)
standard--系統(tǒng)默認(rèn)的activity啟動模式,不管此時任務(wù)棧中的情況如何,每次啟動一個activity,系統(tǒng)都會創(chuàng)建它的實例,并將其置于棧頂。
singleTop--另外一種常用的啟動模式,當(dāng)啟動一個activity時,系統(tǒng)會檢查一下當(dāng)前任務(wù)棧中是否已經(jīng)存在該activity實例,如果已經(jīng)存在,就通過onNewIntent獲得該實例把它置于棧頂。如果沒有。那么創(chuàng)建該activity實例后將其置于棧頂。
singleTask-- 當(dāng)以這種模式啟動activity的時候,需要指定其任務(wù)棧。 activityA啟動activityB的時候,會先在系統(tǒng)尋找是否存在該棧。
- 不存在,創(chuàng)建棧并創(chuàng)建activity實例置于棧頂。
- 存在,則在棧中尋找是否有B的實例,若有,則就通過onNewIntent獲得該實例至于棧頂。無則創(chuàng)建該activity實例后將其置于棧頂。
singleInstance--看到名字就會想到單例模式是吧~是的,確實也是這樣的思想。為了充分利用activity實例達(dá)到極致,設(shè)置這個啟動模式后,activityA啟動activityB,會專門為activityB創(chuàng)建一個任務(wù)棧,并且創(chuàng)建activityB實例至于棧頂。該activity實例便可被系統(tǒng)內(nèi)的應(yīng)用共享。
總結(jié)
對于時不時想把某個activity展示在用戶面前這件事,使用 默認(rèn):不管在不在棧頂,都創(chuàng)建(該棧中可能有多個實例)->棧頂復(fù)用:若在棧頂,則復(fù)用(該棧中可能有多個實例,但相對默認(rèn)模式,少了點(diǎn))->棧內(nèi)復(fù)用:瞅瞅這個棧中有沒有,有就用,沒有就造一個(該棧中只有一個實例)->單例:直接自成一派,創(chuàng)個棧,只有這個activity一個實例并且在棧頂,不管哪個應(yīng)用程序都能用(該應(yīng)用程序上下文中只有一個實例)。 弄明白了這幾種啟動模式后,就需要根據(jù)實際情況決定使用哪種啟動模式。
具體使用場景
由于本人目前對啟動模式的使用比較少,后續(xù)有更多再補(bǔ)充。
-
場景:使通知欄彈出Notification,點(diǎn)擊Notification跳轉(zhuǎn)到指定的Activity。 假設(shè)現(xiàn)在處于棧頂展示在用戶面前的就是這個activity。如果是默認(rèn)模式,則會再次打開當(dāng)前的Activity。這樣展示在用戶面前的效果就會很奇怪。(看起來是閃了一下) 如果使用的啟動模式是singleTop,就會避免這種現(xiàn)象的出現(xiàn)。
-
場景:假設(shè)我們的程序中有一個Activity是允許其他程序調(diào)用的,我們想讓其他程序共享這個Activity的實例。如果使用的啟動模式是singleInstance,就可以解決這個問題。
如何設(shè)置activity的啟動模式
一般有兩種方式設(shè)置。
- 在manifast文件中通過activity的launchMode進(jìn)行設(shè)置。
- 通過對啟動該activity的intent設(shè)置標(biāo)志位實現(xiàn)。
疑惑及解答
1.如何設(shè)置不同的任務(wù)棧?
2.當(dāng)activityA以標(biāo)準(zhǔn)模式啟動B的時候,B的實例被創(chuàng)建且處于activityA任務(wù)棧的頂端,那么這個時候B啟動了A(standard)呢?
3.這兩種設(shè)置方式有什么區(qū)別呢?常用的標(biāo)志位有好幾個,組合起來使用又有什么不同的效果呢?
這些個答案等我下一篇文章再繼續(xù)介紹哈~敬請關(guān)注Android初級開發(fā)筆記-- activity啟動模式的學(xué)習(xí)(2)~
作者介紹
- 楊曉華:廣州蘆葦科技 APP 團(tuán)隊 Android 實習(xí)生
內(nèi)推信息
- 我們正在招募小伙伴,有興趣的小伙伴可以把簡歷發(fā)到 app@talkmoney.cn,備注:來自掘金社區(qū)
- 詳情可以戳這里--> 廣州蘆葦信息科技
轉(zhuǎn)載于:https://juejin.im/post/5cf3f929f265da1b8d1605c5
總結(jié)
以上是生活随笔為你收集整理的Android初级开发笔记-- activity启动模式的学习(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于React Native和Ether
- 下一篇: 实现Nginx https