Activity的啓動模式與吸附值詳解

Activity的啓動模式包含四中:standard、singleTop、singleTask、singleInstance四中啓動模式,可在清單文件中做如下配置:

<span style="font-size:18px;"><activity android:name="MainActivity"
                  android:label="@string/app_name"
                  android:launchMode="singleTask"
                  android:taskAffinity="com.henry.it.test">
</activity></span>


講啓動模式之前,不得不先講一下taskAffinity的知識,中文一般翻譯爲吸附值:

首先taskAffinity是決定Activity的task分配的唯一標準,也就是說,新啓動的Activity是否在原任務棧中,由taskAffinity的值決定,其要點如下:

a)所有Act都有一個taskAffinity,如未明確指定,則默認該Act的吸附值與其所在application的吸附值相同

b)application一定有一個taskAffinity,如果爲明確指定,則默認使用該程序的主包名作爲吸附值

c)每個task一定有一個taskAffinity,該值取其Act棧的棧底Activity的吸附值


介紹完TaskAffinity的基本知識,再來講四中啓動模式特點:

1、standard:標準模式,也是默認模式

a)每次啓動Act,都會創建該Act的新實例

b)每個新創建的Act實例默認都創建於啓動它的Act所在的task

c)每個act可以同時存在多個實例,這些實例可以分佈在同一個Task中,也可以分佈在不同的Task中


2、singleTop

a)當具有singleTop屬性的Act的實例不位於啓動它的棧的棧頂時,其表現與standard模式相同

b)當具有singleTop屬性的Act的實例位於啓動它的棧的棧頂時,則不會創建該Act的新實例,而是調用棧頂Act的實例的onNewIntent()方法,將新intent傳入該實例


3、singleTask

a)具有singleTask屬性的Act局有全局唯一性,在整個Android系統內,該Act在同一時刻只能存在一個實例

b)當啓動具有singleTask屬性的Act時,如果該Act實例上不存在則直接創建新實例,否則,直接將已存在的該Act實例以上的實例全部銷燬,以使得該Act的實例重新處於棧頂位置,並調用onNewintent()方法將新的intent傳入該實例中

c)在創建具有singleTask屬性的Act時,如果該Act的TaskAffinity值與當前task的affinity值相同,則直接在當前task中創建,否則在新的task中創建


4、singleInstance

a)具有singleInstance屬性的Act局有全局唯一性,在整個Android系統內,該Act在同一時刻只能存在一個實例

b)當啓動局有singleInstance屬性的Act時,如果該Act實例上不存在則直接創建新實例,且總是在一個新的Task中創建(不考慮吸附值);如果該Act的實例已存在,則直接顯示已存在的實例

c)該使用局有singleInstance屬性的Act的實例啓動其他Act的實例時,如果被創建的Act的吸附值與已存在的某個task的吸附值相同,則在該task中創建,否則,在新的task中創建實例。


5、Intent的Flag屬性,旗標與啓動模式

a) FLAG_ACTIVITY_BROUGHT_TO_FRONT 若棧中已有A B C D四個Act且B是用該旗標啓動的,那麼再次啓動B將會使棧中的Act的順序變爲 A C D B;

b)FLAG_ACTIVITY_CLEAR_TOP 相當於啓動模式中的singleTask

c)FLAG_ACTIVITY_NEW_TASK 默認旗標

d)FLAG_ACTIVITY_NO_ANIMATION 不使用過渡動畫的旗標

e)FLAG_ACTIVITY_NO_HISTORY 該旗標控制被啓動的Act不會保留在棧中,例如棧中已有A B兩個Act,在B中以該Flag啓動C,再在C中啓動D,此時棧中只有A B D,沒有C;

f) FLAG_ACTIVITY_RECORDER_TO_FRONT 若棧中已有A B C D四個Act,那麼在D中以該Flag啓動B將會使棧中的Act的順序變爲 A C D B,注意與FLAG_ACTIVITY_BROUGHT_TO_FRONT的區別;

g)FLAG_ACTIVITY_SINGLE_TOP 相當於啓動模式中的singleTop


發佈了20 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章