Activity 的啓動模式

在android裏,有4種activity的啓動模式,分別爲:“standard” (默認)、“singleTop”、“singleTask”、“singleInstance”

區別:

1、 是否允許多個實例

“standard”和”singleTop”可以被實例化多次,且可以存在不同的task中,且一個task可以包括一個activity的多個實例;

“singleTask”和”singleInstance”限制只生成一個實例,並且是task的根元素。

singleTop要求如果創建intent的時候棧頂已經有要創建 的Activity的實例,則將intent發送給該實例,而不發送給新的實例。

 

2、. 是否允許其它activity存在於本task內

“singleInstance”獨佔一個task,其它activity不能存在那個task裏;如果它啓動了一個新的activity,不管新的activity的launch mode 如何,新的activity都將會到別的task裏運行(如同加了FLAG_ACTIVITY_NEW_TASK參數)。

而另外三種模式,則可以和其它activity共存。

 

3. 是否每次都生成新實例

“standard”: 每次啓動Intent都會生成一個activity的新實例;

“singleTop”  如果activity的實例在task的棧頂,則不生成新的該activity的實例,直接使用棧頂的實例,否則,生成該activity的實例。

比如現在task棧元素爲A-B-C-D(D在棧頂),這時候給D發一個啓動intent,如果D是 “standard”的,則生成D的一個新實例,棧變爲A-B-C-D-D。如果D是singleTop的話,則不會生產D的新實例,棧狀態仍爲A-B-C-D;如果給B發Intent的話,不管B的launchmode是”standard” 還是 “singleTop” ,都會生成B的新實例,棧狀態變爲A-B-C-D-B。

 總結:

standard  每次都會新建,每個Task都可以有,且每個Task可以有多個實例(每個Task都可以有,且可以有多個) 
singleTop 如果當前實例在棧頂,就不新建實例。 如不在棧頂,則新建實例 (每個Task都可以有,且可以有多個,在棧頂時可複用)
singleTask 新建一個Task,如果已經有其他的Task並且包含該實例,那就直接調用那個Task的實例。(只有一個Task中會有)
singleInstance 新建一個Task,且在該Task中只有它的唯一一個實例。 (只有一個Task會有,且該Task中只有它)

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