天天看點

Activity四大啟動模式

這篇文章主要介紹的是Android-Activity的四大啟動模式:

 standard、singleTop、singleTask、singleInstance 

先來看看這四種模式的思維導圖:

Activity四大啟動模式

下文以模拟場景:在MainActivity中啟動SecondActivity作講解。

1.Standard(預設模式)

這個模式是系統的預設模式,也稱為标準模式,如果沒有指定的啟動模式,那麼都會使用這個标準模式。這個模式的特點是:在目前的Activity(MainActivity)中啟動第二個Activity(SecondActivity),SecondActivity會歸屬到MainActivity的任務棧中 (無論你是否指定了TaskAffinity),且無論該任務棧是否已存在SecondActivity執行個體,系統都會建立新的Activity執行個體。

2.SingleTop (棧頂複用模式)

首先需要明白的是:該啟動模式仍然不會啟動新的任務棧,無論你是否指定了TaskAffinity屬性。

明白了這一點,接着請往下看

這個模式主要有三種情況:

若該任務棧中不存在SecondActivity執行個體,那麼會建立新的SecondActivity執行個體。

若該任務棧中存在SecondActivity執行個體,但不位于棧頂,則會建立新的SecondActivity執行個體。

若該任務棧中存在SecondActivity執行個體,且位于棧頂,則會複用該執行個體。

3.SingleTask (棧内複用模式)

這種啟動模式能夠指定建立SecondActivity的任務棧,即利用TaskAffinity屬性指定任務棧(任務棧不存在時,建立新的任務棧),若不指定,則預設為MainActivity的任務棧。

接下來,會判斷任務棧中是否已存在SecondActivity執行個體:

若不存在,則建立新的SecondActivity執行個體。

若已存在,則會使該SecondActivity執行個體以上的其他Activity統統出棧,來讓自身執行個體位于棧頂,并複用該執行個體。

4.SingleInstance(全局唯一模式)

這種啟動模式也稱全局單例模式,顧名思義,及整個系統中僅存在該Activity的一個執行個體。

在啟動SecondActivity時,

若系統中沒有存在SecondActivity執行個體,則建立一個SecondActivity執行個體并獨占一個任務棧,後續再啟動該Activity時,都會複用這個全局唯一執行個體,除非該任務棧被銷毀。

若啟動時,發現系統已存在一個SecondActivity時,都會複用這個全局唯一執行個體。

這裡做過一個小測試:即将MainActivity和SecondActivity都指定同一個任務棧,在OnCreate()方法中列印它們的TaskId,

發現系統會自動的為SecondActivity準備新的任務棧,并不會讓它們共處一個任務棧。

後面會持續的添加相關代碼上來。

如有錯誤,歡迎能夠指出,十分感謝!