task是什嗎?
task的作用?
task與stack的關係?
task什麼時候建立?
task是一組Activity執行個體的集合,這些執行個體是為了完成了一項特定的操作,按被啟用的先後順序存放在
一個與Task相對應的Stack中,這些執行個體可以是一個屬於一個application的,也一個屬於不同的的application的
,比如在寫簡訊新增連絡人...時需要開啟通訊錄的裡面的Activity,而從寫簡訊到新增連絡人...再到後面的發送,
這一串的動作都是屬於一個task。
android的提供task機制是為了提高使用者體驗,比如寫簡訊時新增連絡人...,寫簡訊是屬於sms application,
而新增連絡人...列表是屬於contacts application的,雖然是屬於兩個不同的application,但使用者添加完連絡人後
又回到寫簡訊的介面,感覺就像一個application,用起來非常的流暢,這就是task的功勞。
當我們在homescreen中點擊一個icon啟動一個application時(此處假定此application在後台沒有運行),
第一個啟動的Activity會建立一個Task,每個Activity都會有一個affinity屬性,來指定此Activity是屬於哪個task,
預設的情況下一個application中的Activity的affinity屬性都是相同的,即一個application中activity是屬於同一個task的,
但這隻是預設的情況,如果在Activity在AndroidManifest.xml註冊時,添加屬性
android:taskAffinity="com.android.xxx" //此處的屬性名稱不能與activity所在的包相同 android:allowTaskReparenting="true"
當Activity在被啟用時,會另外建立一個Task,即一個application可以對應有多個task。雖然是建立了一個Task,
但是在按返回鍵時,還是會回到之前的activity,看google官方註解:
Note: Although the activity starts in a new task, theBack button still returns the user to the previous activity.
以下的兩種Activity啟動模式也會建立Task:
singleTask:這是Activity的單任務啟動模式,即當Activity被啟用時,會先判斷是否有執行個體已存在已有的task中,
如沒有執行個體,則建立一個Task,Activity在此task中啟動;如已有執行個體存在了,則把執行個體所在的Task作為一個整體
從後台移到前台,見:
這裡有兩種情況:一個是要被啟用的Activity執行個體在Task所對應的棧的棧頂;二是被啟用的Activity執行個體不在task的
所對應棧的棧頂,此時就把此執行個體推到棧頂,在此執行個體上面的執行個體都會被推出棧而登出掉
singleInstance: 這是Activity單一實例啟動模式, 即第一次建立該執行個體的時候,會建立一個專屬改執行個體的task,
此task中沒會有其他的執行個體,如果此task處於後台,再啟用此Activity時,就會複用該執行個體,
不會建立新執行個體和新task。