這篇文章主要介紹的是Android-Activity的四大啟動模式:
standard、singleTop、singleTask、singleInstance
先來看看這四種模式的思維導圖:
下文以模拟場景:在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準備新的任務棧,并不會讓它們共處一個任務棧。
後面會持續的添加相關代碼上來。
如有錯誤,歡迎能夠指出,十分感謝!