zzz~
Activity 是 Android 中重要的一部分 下面我們來了解下
Activity 的四個啟動模式
- 标準模式(
)Standard
- 棧頂複用模式(
)SingleTop
- 棧内複用模式(
)SingleTask
- 單例模式(
SingleInstance
)
我們都知道 Android 是通過堆棧的方式 管理的 每加載一個新的 Activity 就會添加到 目前堆棧的頂部 , 以此類推
每次按 Back 鍵 或 調用 finish 方法 結束掉目前 Activity 的時候 都會把目前 Activity 從 堆棧任務 裡面去掉
啟動模式 詳細介紹
-
标準模式(
)Standard
- 标準模式為 Activity 的預設啟動模式
- 每啟動一次 Activity , 就會建立一個新的 Activity 執行個體 和 置于棧頂
- 新的 Activity 運作在 啟動它的 Activity 所在的 堆棧中
-
因為 ApplicationContext 沒有任務棧 , 故無法采用标準模式啟動 Activity
必須要為待啟動的 Activity 指定标記 :
是以啟動的時候就會為其建立一個新的任務棧intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
Android Activity啟動模式詳解
-
棧頂複用模式(
)SingleTop
- 若需要建立的 Activity 已經位于任務棧 棧頂的話 , 則該 Activity 執行個體不會重新建立 , 而是重用棧頂的執行個體
調用執行個體裡面的 onNewIntent() 方法 , 而不會重新調用 onCreate() 和 onStart() 方法
- 否則 , 就會建立該 Activity 新的執行個體 并且 置于棧頂
Android Activity啟動模式詳解
- 若需要建立的 Activity 已經位于任務棧 棧頂的話 , 則該 Activity 執行個體不會重新建立 , 而是重用棧頂的執行個體
-
棧内複用模式(
)SingleTask
- 檢視建立的 Activity 是否存在此任務棧 , 若不存在則重新建立一個任務棧 , 建立該 Activity 執行個體 且 置于棧中
- 若存在 則檢視該 Activity 是否存在任務棧 棧内
: 則将目前 Activity 執行個體以上的所有 Activity 移出任務棧 , 使目前 Activity 置于棧頂 并 調用 onNewIntent() 方法存在
: 建立一個 新的 Activity 執行個體 并 置于棧頂不存在
-
可以通過 TaskAffinity 屬性 指定 Activity 想要的任務棧
Android Activity啟動模式詳解
-
單例模式(
)SingleInstance
- 直接建立一個新的 任務棧 和 建立該 Activity 執行個體 放入新建立的棧中
- 棧内複用模式
的加強版(singleTask)
- 一旦該模式的 Activity 執行個體已經存在于某個棧中 , 任何應用激活該 Activity 時都會重新使用該棧中的執行個體 且 進入到該應用中
- 即 多個應用共享該棧中的該 Activity 執行個體
Android Activity啟動模式詳解
啟動模式的設定方式
啟動模式有2種設定方式:在
AndroidMainifest
設定、通過
Intent
設定辨別
在 AndroidMainifest 的 Activity 配置進行設定
<activity
android:launchMode="啟動模式"
//屬性
//standard:标準模式
//singleTop:棧頂複用模式
//singleTask:棧内複用模式
//singleInstance:單例模式
//如不設定,Activity的啟動模式預設為**标準模式(standard)**
</activity>
通過Intent設定辨別
Intent inten = new Intent (ActivityA.this, ActivityB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
辨別屬性 說明
FLAG_ACTIVITY_SINGLE_TOP : 指定啟動模式為棧頂複用模式 (
SingleTop
)
FLAG_ACTIVITY_NEW_TASK : 指定啟動模式為棧内複用模式 (
SingleTask
)
FLAG_ACTIVITY_CLEAR_TOP : 所有位于其上層的Activity都要移除,
SingleTask
模式預設具有此标記效果
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS : 具有該标記的Activity不會出現在曆史Activity的清單中,即無法通過曆史清單回到該Activity上
二者設定的差別
- 優先級不同
設定方式的優先級 >Intent
設定方式,即 以前者為準Manifest
- 限定範圍不同
設定方式無法設定Manifest
;FLAG_ACTIVITY_CLEAR_TOP
設定方式 無法設定單例模式(Intent
)SingleInstance
以上 就是本文要介紹的 Android Activity 四種 啟動模式的 詳細說明 和 使用方式