android任務棧
1.啟動任務棧
第一種,動作設置為“android.intent.action.MAIN”,類別設置為“android.intent.category.LAUNCHER”,
可以使這個ACT(activity)實例稱為一個任務棧的入口,擁有這種類型的intent-filter的ACT類型的圖
表和名字也會顯示在application launcher中。
第二種,即是采用用“singleInstance”模式,另外開個一個唯一ACT的棧,
提示:如果“singleInstance”模式同時還加上上麵的類型,則當前ACT也是一個單獨ACT的任務棧,而應用其他ACT會組成另外一個任務棧
2.啟動模式
<activity>標簽的launchMode屬性可以設置為四種不同的模式:
“standard” :(默認模式)反複創建新實例,如A-B-A-C-D-B-A…依次隨便加
“singleTop” : 避免出現類似A-B-C-D-D…,如D采用"singleTop",則是A-B-C-D
“singleTask”: 如A采用"singleTask",則在“standard”中類似A-B-C-D-A任務棧,在“singleTask”隻會剩下A,BCD都會被回收
“singleInstance” : 此模式你另外開個一個任務棧,且單獨隻有一個ACT
3.清理任務棧
默認:如果一個任務棧在很長的一段時間都被用戶保持在後台的,那麼係統就會將這個任務棧中除了根ACT以外的
其它所有ACT全部清除掉。當用戶再將任務棧切換到前台,則隻能顯示根activity了。
1)alwaysRetainTaskState屬性
如果將根ACT的alwaysRetainTaskState屬性設置為“true”,則即便一個任務棧在很長的一段時間都被用戶
保持在後台的,係統也不會對這個任務棧進行清理。
2)clearTaskOnLaunch屬性
如果將根ACT的clearTaskOnLaunch屬性設置為“true”,那麼隻有這個任務棧切換到了後台,那麼係統就會
將這個任務棧中除了根ACT以外的其它所有ACT全部清除掉。即和alwaysRetainTaskState的行為完全相反。
3) finishOnTaskLaunch屬性
這個屬性的行為類似於clearTaskOnLaunch,但是此屬性作用於單個的ACT對象,而不是整個任務棧。當這個
任務棧切換到了後台,這個屬性可以使任務棧清理包括根ACT在內的任何ACT對象。
4.還複雜點可以加入親屬關係taskAffinity
總結:簡單的說,即是開一個(或幾個)任務棧,在每個任務棧上添加ACT,遇到“singleTask”的則回到之前存在的ACT,把夾在中間的ACT全部回收
最後更新:2017-04-03 08:26:24