天天看點

Android Activity啟動模式詳解

zzz~

Activity 是 Android 中重要的一部分 下面我們來了解下

Activity 的四個啟動模式

  • 标準模式(

    Standard

  • 棧頂複用模式(

    SingleTop

  • 棧内複用模式(

    SingleTask

  • 單例模式(

    SingleInstance

    我們都知道 Android 是通過堆棧的方式 管理的 每加載一個新的 Activity 就會添加到 目前堆棧的頂部 , 以此類推

    每次按 Back 鍵 或 調用 finish 方法 結束掉目前 Activity 的時候 都會把目前 Activity 從 堆棧任務 裡面去掉

啟動模式 詳細介紹

  • 标準模式(

    Standard

    • 标準模式為 Activity 的預設啟動模式
    • 每啟動一次 Activity , 就會建立一個新的 Activity 執行個體 和 置于棧頂
    • 新的 Activity 運作在 啟動它的 Activity 所在的 堆棧中
    • 因為 ApplicationContext 沒有任務棧 , 故無法采用标準模式啟動 Activity

      必須要為待啟動的 Activity 指定标記 :

      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

      是以啟動的時候就會為其建立一個新的任務棧
      Android Activity啟動模式詳解
  • 棧頂複用模式(

    SingleTop

    • 若需要建立的 Activity 已經位于任務棧 棧頂的話 , 則該 Activity 執行個體不會重新建立 , 而是重用棧頂的執行個體

      調用執行個體裡面的 onNewIntent() 方法 , 而不會重新調用 onCreate() 和 onStart() 方法

    • 否則 , 就會建立該 Activity 新的執行個體 并且 置于棧頂
      Android Activity啟動模式詳解
  • 棧内複用模式(

    SingleTask

    • 檢視建立的 Activity 是否存在此任務棧 , 若不存在則重新建立一個任務棧 , 建立該 Activity 執行個體 且 置于棧中
    • 若存在 則檢視該 Activity 是否存在任務棧 棧内

      存在

      : 則将目前 Activity 執行個體以上的所有 Activity 移出任務棧 , 使目前 Activity 置于棧頂 并 調用 onNewIntent() 方法

      不存在

      : 建立一個 新的 Activity 執行個體 并 置于棧頂
    • 可以通過 TaskAffinity 屬性 指定 Activity 想要的任務棧

      Android Activity啟動模式詳解
  • 單例模式(

    SingleInstance

    • 直接建立一個新的 任務棧 和 建立該 Activity 執行個體 放入新建立的棧中
    • 棧内複用模式

      (singleTask)

      的加強版
    • 一旦該模式的 Activity 執行個體已經存在于某個棧中 , 任何應用激活該 Activity 時都會重新使用該棧中的執行個體 且 進入到該應用中
    • 即 多個應用共享該棧中的該 Activity 執行個體
      Android Activity啟動模式詳解

啟動模式的設定方式

啟動模式有2種設定方式:在

AndroidMainifest

設定、通過

Intent

設定辨別

在 AndroidMainifest 的 Activity 配置進行設定

<activity
android:launchMode="啟動模式"
//屬性
//standard:标準模式
//singleTop:棧頂複用模式
//singleTask:棧内複用模式
//singleInstance:單例模式
//如不設定,Activity的啟動模式預設為**标準模式(standard)**
</activity>
           

通過Intent設定辨別

Intent inten = new Intent (ActivityA.this, ActivityB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
           

辨別屬性 說明

FLAG_ACTIVITY_SINGLE_TOP : 指定啟動模式為棧頂複用模式 (

SingleTop

)

FLAG_ACTIVITY_NEW_TASK : 指定啟動模式為棧内複用模式 (

SingleTask

)

FLAG_ACTIVITY_CLEAR_TOP : 所有位于其上層的Activity都要移除,

SingleTask

模式預設具有此标記效果

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS : 具有該标記的Activity不會出現在曆史Activity的清單中,即無法通過曆史清單回到該Activity上

二者設定的差別

  • 優先級不同

    Intent

    設定方式的優先級 >

    Manifest

    設定方式,即 以前者為準
  • 限定範圍不同

    Manifest

    設定方式無法設定

    FLAG_ACTIVITY_CLEAR_TOP

    Intent

    設定方式 無法設定單例模式(

    SingleInstance

以上 就是本文要介紹的 Android Activity 四種 啟動模式的 詳細說明 和 使用方式