android啓動模式小結

啓動模式

standard
標準模式,會在啓動他的activity中的任務棧中創建activity實例,注意:application context是沒有任務棧的。

singleTop
單棧頂模式。同一個任務棧裏如果需要啓動的actiivty位於棧頂,則不會實例化,而是直接調用onNewIntent。

singleTask
單任務模式。啓動一個新的activity,先找對應的任務棧,未找到則new一個。再找實例,若實例存在,則該實例會調用onNewIntent,位於該實例之上的activty的全部出棧。

singleInstance
單實例模式。佔有唯一的任務棧,而且也只有自己一個實例。
設置taskAffinity與默認包名不一致時,此actvity會獨立出來,用戶可以通過多任務管理下切換到該任務。
此實例啓動的activity若查找不到匹配的taskAffinity,會爲其創建新的任務棧,而一般情況下,taskAffinity與singleTask結合纔有意義。

該模式下一旦未設置taskAffinity,變成後臺任務棧的時候,用戶是不能直接切換到此activity中的,需要通過其他任務棧intent啓動。

taskAffinity
任務粘合度。其實可以理解爲任務棧的唯一標識,設置後的任務棧會顯示展示在用戶的任務切換欄中。
除了singleInstance創建的實例所在的任務棧中可能無法沒被標識,其他創建模式均會在默認任務棧中創建。
單獨使用taskAffinity的standard是無效的(除了singleInstance啓動的,至於原因還有待考究),需要配合singleTask使用,這樣才能實現任務棧的調度。

切換tips:

點擊app的圖標,就是查找帶有下列入口的activity所在的任務棧,再把棧頂的activity顯示出來。

 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />

點擊home鍵,可以理解爲調用home activity,把其他任務棧都變成後臺任務棧,變成不可見狀態。想要直接打開對應的activity,可以在任務切換欄中選擇對應的任務棧,或者點擊桌面app圖標,進入默認的任務棧。

點擊back鍵,相當於當前任務棧中的棧頂activity彈出,彈到棧底的話,就會退到最近使用的任務棧。

ps:
adb shell dumpsys activity指令可以查看手機的任務棧狀態

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