天天看點

FLAG_ACTIVITY_NEW_TASK标記 以及taskAffinity屬性

轉載至:FLAG_ACTIVITY_NEW_TASK标記 以及taskAffinity屬性

taskAffinity:

Activity的歸屬,也就是Activity應該在哪個Task中,Activity與Task的吸附關系

每個Activity都有taskAffinity屬性,這個屬性指出了它希望進入的Task。如果一個Activity沒有顯式的指明該Activity的taskAffinity,那麼它的這個屬性就等于Application指明的taskAffinity,如果Application也沒有指明,那麼該taskAffinity的值就等于包名。而Task也有自己的affinity屬性,它的值等于它的根Activity的taskAffinity的值。

 FLAG_ACTIVITY_NEW_TASK:

當傳遞給startActivity()的Intent對象包含FLAG_ACTIVITY_NEW_TASK标記時,系統會為需要啟動的activity尋找與目前activity不同的task。如果要啟動的activity的affinity屬性與目前所有的task的affinity屬性都不相同,系統會建立一個帶那個affinity屬性的task,并将要啟動的activity壓到建立的task棧中;否則将activity壓入那個affinity屬性相同的棧中。

singleTask模式:

首先該Activity會檢查是否存在與它的taskAffinity相同的Task。

    1、如果存在,那麼檢查是否執行個體化,如果已經執行個體化,那麼銷毀在該Activity以上的Activity并調用onNewIntent。如果沒有執行個體化,那麼該Activity執行個體化并入棧。

    2、如果不存在,那麼就重新建立Task,并入棧。

singleInstance:

1、當一個應用程式加載一個singleInstance模式的Activity時,如果該Activity沒有被執行個體化,那麼就重新建立一個Task,并入棧,如果已經被執行個體化,那麼就調用該Activity的onNewIntent;

    2、singleInstance的Activity所在的Task不允許存在其他Activity,任何從該Activity加載的其它Actiivty(假設為Activity2)都會被放入其它的Task中,如果存在與Activity2相同affinity的Task,則在該Task内建立Activity2。如果不存在,則重新生成新的Task并入棧。

繼續閱讀