Activity的啓動模式

Activity的啓動模式

1.1 Activity的LaunchMode

1.1.1爲什麼需要啓動模式

因爲Activity的使用任務棧進行對Activity實例控制,任務棧是一種先進後出的棧結構。如果我們多次啓動同一個Activity,系統會重複創建多個實例,這樣子就會導致某些場景下,應用的界面跳轉不合用戶的期望。例如:用戶一般希望回到主界面時,再次點擊back鍵後,就是表示真正的退出應用。但是如果是棧形式的每次啓動一個Activity就會創建一個實例的一個控制方式,那麼就實現不了這個結果。所以,Android設計了啓動模式來修改系統的默認行爲。

1.1.2啓動模式種類

  1. standard:標準模式。系統默認的模式。每一次啓動Activity都會重新創建一個新的實例,不管這個實例是否已經存在。
  2. singleTop:棧頂複用模式。如果新Activity已經位於任務棧的棧頂,那麼此Activity不會被重新創建,同時它的onNewIntent方法會被調用。
  3. singleTask:棧內複用模式。也會回調其onNewIntent方法。singleTask默認具有clearTop的效果,會導致棧內在該實例前面的所有實例都會被出棧。(生命週期爲:onPause->onNewIntent->onResume)
  4. singleInstance:單實例模式。這種Activity只能單獨地位於一個任務棧中。比如:Activity A是singleInstance模式,當A啓動後,系統會爲它創建一個新的任務棧,然後A獨自在這個新的任務棧中,由於棧內複用特性,後續的請求均不會創建新的Activity,除非這個獨特的任務棧被系統銷燬了。

1.1.3Activity的Flags

  1. FLAG_ACTIVITY_NEW_TASK
    該標記位的作用與singleTask啓動模式意義一樣。
  2. FLAG_ACTIVITY_SINGLE_TOP
    該標記位的作用與singleTop啓動模式意義一樣。
  3. FLAG_ACTIVITY_CLEAR_TOP
    具有該標記位的Activity,當它啓動時,在同一個任務棧中所有位於它上面的Activity都要出棧。
    這個模式一般需要和FLAG_ACTIVITY_NEW_TASK配合使用,在這種情況下,被啓動Activity的實例如果存在,那麼系統就會調用它的onNewIntent。
    如果被啓動的Activity採用standard模式啓動,那麼它連同它之上的Activity都要出棧,系統會創建新的Activity實例並放入棧頂。
  4. FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
    具有這個標記的Activity不會出現在歷史Activity的列表中,當某些情況下,我們不希望用戶通過歷史列表回到我們的和Activity時,就可以使用該標記。他等同於在XML中指定Activity的屬性android:excludeFromRecents="true"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章