啟動(dòng)模式
Activity
的管理是采用任務(wù)棧(類似于集合)的形式
-
Android
任務(wù)棧又稱為Task雀摘,它是一個(gè)棧結(jié)構(gòu),具有后進(jìn)先出的特性八拱,用于存放我們的Activity
組件阵赠。 - 每次打開個(gè)新的
Activity
或者退出當(dāng)前Activity
都會(huì)在任務(wù)棧的中添加或者減少一個(gè)Activity
涯塔,因此一個(gè)任務(wù)棧包含了一個(gè)activity
的集合,android
系統(tǒng)可以通過Task有序地管理每個(gè)activity
,并決定哪個(gè)Activity
與用戶進(jìn)行交互:只有在任務(wù)棧棧頂?shù)?code>activity才可以跟用戶進(jìn)行交互清蚀。 - 在退出應(yīng)用程序時(shí)匕荸,必須把所有的任務(wù)棧中所有的
activity
清除出棧時(shí),任務(wù)棧才會(huì)被銷毀。 - 一個(gè)App中可能不止一個(gè)任務(wù)棧枷邪,某些特殊情況下榛搔,單獨(dú)一個(gè)
Actvity
可以獨(dú)享一個(gè)任務(wù)棧。還有一點(diǎn)就是一個(gè)Task中的Actvity可以來自不同的App东揣,同一個(gè)App的Activity也可能不在一個(gè)Task中践惑。
Activity
啟動(dòng)模式有如下幾種
- 標(biāo)準(zhǔn)模式(
standard
) - 棧頂復(fù)用模式(
singleTop
) - 棧內(nèi)復(fù)用模式(
singleTask
) - 單例模式(
singleInstance
)
標(biāo)準(zhǔn)模式(standard)
- 啟動(dòng)一次
Activity
就會(huì)創(chuàng)建一個(gè)新的Activity
實(shí)例并且處于棧頂(啟動(dòng)該Activity
的那個(gè)棧)
棧頂復(fù)用模式(singleTop)
- 如果啟動(dòng)的
Activity
處于棧頂,就直接重用該實(shí)例(調(diào)用onNewIntent()
嘶卧、不調(diào)用onCreate()
和onStart()
) - 如果啟動(dòng)的
Activity
不在棧頂尔觉,就創(chuàng)建新的實(shí)例
棧內(nèi)復(fù)用模式(singleTask)(在同一個(gè)棧內(nèi)中的基礎(chǔ)上)
- 棧內(nèi)已經(jīng)存在該
Activity
的實(shí)例,就移除該實(shí)例上面所有Activity
- 不存在芥吟,就創(chuàng)建新的實(shí)例
單利模式(singleInstance)
- 啟動(dòng)
Activity
是就創(chuàng)建一個(gè)新的棧侦铜,再創(chuàng)建Activity
實(shí)例放進(jìn)去
用于多個(gè)app共享一個(gè)
Activity
實(shí)例
設(shè)置啟動(dòng)模式
- 清單文件里面Activity添加屬性,默認(rèn)為標(biāo)準(zhǔn)模式
android:launchMode="啟動(dòng)模式"
- 通過Intent設(shè)置
Intent inten = new Intent (context,ActivityB.class);
intent,addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);//啟動(dòng)模式
startActivity(intent);
-
FLAG_ACTIVITY_SINGLE_TOP
//singleTop -
FLAG_ACTIVITY_NEW_TASK
//standard