SingleTask SingleInstance的區別

現有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,這是有錯誤的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章