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