啟動模式
Activity
的管理是采用任務棧(類似于集合)的形式
-
Android
任務棧又稱為Task,它是一個棧結構,具有后進先出的特性,用于存放我們的Activity
組件。 - 每次打開個新的
Activity
或者退出當前Activity
都會在任務棧的中添加或者減少一個Activity
,因此一個任務棧包含了一個activity
的集合,android
系統可以通過Task有序地管理每個activity
,并決定哪個Activity
與用戶進行交互:只有在任務棧棧頂的activity
才可以跟用戶進行交互。 - 在退出應用程序時,必須把所有的任務棧中所有的
activity
清除出棧時,任務棧才會被銷毀。 - 一個App中可能不止一個任務棧,某些特殊情況下,單獨一個
Actvity
可以獨享一個任務棧。還有一點就是一個Task中的Actvity可以來自不同的App,同一個App的Activity也可能不在一個Task中。
Activity
啟動模式有如下幾種
- 標準模式(
standard
) - 棧頂復用模式(
singleTop
) - 棧內復用模式(
singleTask
) - 單例模式(
singleInstance
)
標準模式(standard)
- 啟動一次
Activity
就會創建一個新的Activity
實例并且處于棧頂(啟動該Activity
的那個棧)
棧頂復用模式(singleTop)
- 如果啟動的
Activity
處于棧頂,就直接重用該實例(調用onNewIntent()
、不調用onCreate()
和onStart()
) - 如果啟動的
Activity
不在棧頂,就創建新的實例
棧內復用模式(singleTask)(在同一個棧內中的基礎上)
- 棧內已經存在該
Activity
的實例,就移除該實例上面所有Activity
- 不存在,就創建新的實例
單利模式(singleInstance)
- 啟動
Activity
是就創建一個新的棧,再創建Activity
實例放進去
用于多個app共享一個
Activity
實例
設置啟動模式
- 清單文件里面Activity添加屬性,默認為標準模式
android:launchMode="啟動模式"
- 通過Intent設置
Intent inten = new Intent (context,ActivityB.class);
intent,addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);//啟動模式
startActivity(intent);
-
FLAG_ACTIVITY_SINGLE_TOP
//singleTop -
FLAG_ACTIVITY_NEW_TASK
//standard