Activity 四種啓動方式及Flags

activity 四種啓動方式

  • standard標準模式:每次啓動一個Activity就會創建一個新的實例
  • singleTop棧頂複用模式:如果新Activity已經位於任務棧的棧頂,就不會重新創建,並回調 onNewIntent(intent) 方法。同個Activity實例在棧中可以有多個,即可能重複創建;該模式的Activity會默認進入啓動它所屬的任務棧,即不會引起任務棧的變更;爲防止快速點擊時多次startActivity,可以將目標Activity設置爲singleTop

  • singleTask棧內複用模式:只要該Activity在一個任務棧中存在,都不會重新創建,並回調 onNewIntent(intent) 方法。如果不存在,系統會先尋找是否存在需要的棧,如果不存在該棧,就創建一個任務棧,並把該Activity放進去;如果存在,就會創建到已經存在的棧中。同個Activity實例在棧中只有一個,即不存在重複創建;可通過android:taskAffinity設定該Activity需要的任務棧,即可能會引起任務棧的變更;常用於主頁和登陸頁
  • singleInstance單實例模式:具有此模式的Activity只能單獨位於一個任務棧中,且此任務棧中只有唯一一個實例。當我們這個程序的活動允許其他程序調用時,要實現這個程序和其他程序共享這個活動的話,前邊的三種模式都實現不了,因爲每個程序都有自己的返回棧,同一個活動在不同的返回棧中入棧的時候會創建一個新的實例。而singleIntance模式可以解決這個問題,以爲這個模式有一個獨立的返回棧來管理這個活動,無論有多少程序來調用這個活動,都共用同一個返回棧。

 

Activity 的 Flags

FLAG_ACTIVITY_NEW_TASK
    爲Activity 指定 singleTask 啓動模式,效果和在 XML 中指定 singleTask 模式相同

FLAG_ACTIVITY_SINGLE_TOP
    爲Activity 指定 singleTop 啓動模式,效果和在 XML 中指定 singleTop 模式相同

FLAG_ACTIVITY_CLEAR_TOP
    具有此標記位的Activity,當它啓動時,在同一個任務棧中所有位於它上面的Activity 都要出棧。這個標記位一般會和 singleTask 啓動模式一起出現,在此種情況下,被啓動 Activity 實錄如果已經存在,系統則會調用它的 onNewIntent。如果被啓動的Activity 採用 standard 模式啓動,那麼它連同它之上的Activity 都要出棧,系統會創建新的Activity 實例並放入棧頂。

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
    具有此標記位的Activity 不會出現在歷史Activity 的列表中,當某些情況下我們不希望用戶通過歷史列表回到我們的Activity 的時候這個標記比較有用。它等同於在XML 中指定Activity 的屬性 android:excludeFromRecents="true"


感謝:https://blog.csdn.net/liuhe688/article/details/6754323

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