Android的任務(wù)棧

一個(gè)App啟動(dòng)時(shí),如果當(dāng)前環(huán)境不存在改App的任務(wù)棧,系統(tǒng)就會(huì)創(chuàng)建一個(gè)新的任務(wù)棧。這個(gè)棧也被叫做Task。

一個(gè)Task中的Activity可以來自不同的App,通一個(gè)App鐘的Activity也可能不在一個(gè)Task。

正常模式下的棧就是后進(jìn)先出,這里不在介紹。

下面要介紹的是“特權(quán)”模式下的情形:

1、AndroidManifest.xml啟動(dòng)模式

此模式是通過android:launchMode進(jìn)行設(shè)置的,有四種standard、singleTop、singleTask、singleInstance。

standard:默認(rèn),每次啟動(dòng)重新創(chuàng)建,so easy。

singleTop:棧頂存在則不創(chuàng)建,試用于刷新界面的操作。第二次啟動(dòng)會(huì)調(diào)用onNewIntent方法。

singleTask:

(1)在同一個(gè)App中啟動(dòng)singleTask的Activity,將該Activity置于棧頂,它上面的全部銷毀。

(2)其他App以singleTask模式啟動(dòng)這個(gè)Activity,創(chuàng)建一個(gè)新的任務(wù)棧。如果啟動(dòng)模式為singleTask的Activity已經(jīng)在一個(gè)任務(wù)棧中,那么啟動(dòng)后,后臺(tái)的這個(gè)任務(wù)棧將一起唄切換到前臺(tái)。

Back stack:Activity2-Activity1

Background task:ActivityY-ActivityX

Activity2 startActivity(ActivityY):ActivityY-ActivityX-Activity2-Activity1?

SingleTask:多個(gè)應(yīng)用共享Activity的一個(gè)實(shí)例,該任務(wù)棧中只存在這一個(gè)Activity。

注意:在一個(gè)singleTop或者singleInstance的ActivityA中通過startActivityForResult啟動(dòng)里一個(gè)ActivityB,系統(tǒng)會(huì)直接返回Activity.RESULT_CANCELED,而不會(huì)再去等待返回。因?yàn)椴煌腡ask之間是不能傳遞數(shù)據(jù)的,如果一低要傳遞,只能通過Intent綁定數(shù)據(jù)。

2、Intent Flag啟動(dòng)模式

Intent.FLAG_ACTIVITY_NEW_TASK:

使用一個(gè)新的Task來啟動(dòng)Activity,常使用在Service中啟動(dòng)Activity的場景,因?yàn)镾ervice中不存在Activity的棧。

FLAG_ACTIVITY_SINGLE_TOP:

與Android:launchMode="sibgleTop"效果相同。

FLAG_ACTIVITY_CLEAR_TOP:

使用singleTask模式來啟動(dòng)一個(gè)Activity,與launchMode="sibgleTask"效果相同。

FLAG_ACTIVITY_NO_HISTORY:

使用該方式啟動(dòng)的ActivityA,當(dāng)ActivityA再啟動(dòng)其它Activity之后,ActivityA不會(huì)保留在棧中。

清空任務(wù)棧:

clearTaskOnLaunch:每次返回該Activity的時(shí)候都將該Activity智商的所有Activity清除。

finishOnTaskLaunch:當(dāng)離開這個(gè)Activity所處的Task,當(dāng)用戶再返回的時(shí)候該Activity就會(huì)被finish。

alwaysRetainTaskState:給Task一個(gè)免死金牌,該Activity所在的棧不接受任何清理命令,一直保持當(dāng)前Task的狀態(tài)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容