前言
CVTE面試的時候答的最爛的一個題目了。廢話不多說,因爲只要學過Android都應該知道四個啓動模式:standard
、singleTop
、singleTask
、singleInstance
。
思維導圖
standard、singleTop、singleTask針對的任務棧都是當前對應的app進程的,而singleInstance指向整個系統。
standard — 標準模式
Activity的默認啓動方式。
- 特徵:每次啓動一個Activity都會創建一個實例。
- 應用場景:默認情況。
singleTop — 棧頂複用
- 特徵:如果在棧頂,就不在創建實例。反之則創建。
- 應用場景:當前要跳轉的頁面已經在棧頂時,比如說消息通知跳轉
singleTask — 棧內複用
- 特徵:如果棧內存在,就將後入棧的實例全部彈出。
- 應用場景:有一個專用主頁面作爲基礎的app,這樣的app現在市面上也非常普遍存在,就比如一個
Activity
中嵌入ViewPager
+BottomNavigationBar
製作成的一個主頁面一樣,ViewPager
中嵌入了很多的Fragment
,這個時候如果是standard
或singleTop
的形式,很容易讓應用卡頓。
注意點:
如果其他App進程開啓了Activity1,這個時候會創建新的任務棧
如果以該啓動模式啓動的Activity1已經活動在後臺的一個任務棧中,那麼啓動後,後臺任務棧會一起切換到前臺。
singleInstance — 全局唯一
跟前三種啓動模式不同,他並不要求實例在同一個任務棧
- 特徵:系統中只會有一個實例。
- 應用場景:系統內部的應用,比如電話、短信等功能,通過
Intent
進行傳播時,固定的就會調用這些系統自帶的應用,在自己的應用中一般比較少使用。
最後
現在,幾張圖就可以輕鬆明白了!分享不易,大家可以關注我點個贊支持一下!
還有更多的學習內容已經上傳到了我的GitHub,附上我的鏈接:https://github.com/Meng997998/AndroidJX