現有2個項目,taskA、taskB。taskA負責調用taskB中指定的介面。
taskB中有3個介面,a、b、c,每個介面顯示它所在的task id。
SingleTask:
其中b介面被聲明為SingleTask。
先運行taskB,顯示a介面,由a介面調用b介面,這時b介面的taskid與a介面的taskid是一致的,說明b介面與a介面在同一個task中;由b介面調用c介面時,c介面的taskid與a和b介面的taskid一致,說明這三個介面是在同一個task中。當前顯示的是c介面,此時按Home鍵回到案頭,運行taskA的介面調用taskB的b介面,這時b介面顯示出來,它的taskid沒有變,還是之前的taskid,只不過之前顯示的是c介面,這時c介面已經不知所蹤,這時再按back鍵,則回到了a介面,然後是taskA的介面。
這說明,SingleTask所標註的Activity在被自身的app調用時,是不建立task的,同時,如果系統中存在了這個SingleTask介面的執行個體時,會將其所在的task切換到前台,並把SingleTask介面之後開啟的其他介面全部關閉(有待考證是否關閉)。
另外有一種情況,例如:a介面被調用,這時按Home鍵返回到案頭,啟動taskA,並調用b介面,這時b介面的taskid與a介面的一致,說明b介面與a介面同屬於一個task。如果直接運行taskA調用b介面,b的taskid與taskA的介面的taskid不同,說明在新task中執行個體化了b介面,由b介面調用c介面,c介面的taskid與b介面一致,說明b與c同屬於一個task。
SingleInstance:
將b介面聲明為SingleInstance。
先運行taskB,顯示a介面,由a介面調用b介面,這時b介面的taskid與a介面的taskid不同,說明b介面是在新task中產生的執行個體;由b介面調用c介面,c介面的taskid與a介面的taskid相同,說明a、c介面同屬於一個task。
由此可以看出SingleTask與SingleInstance是有本質區別的,而不是像網上說的那樣,都是task的root activity,這是有錯誤的。