知識點整理篇(二):Android中的任務棧Task與Activity啓動模式的糾纏


一、前沿:
  • Android 中談到啓動模式,就離不開任務棧Task。
  • Android中對Activty存儲的管理與Task息息相關,以下爲個人對Task與啓動模式的小結。

二、Task
  • 談到Activity的啓動模式,就會涉及到數據結構中的棧,Android中的任務棧也稱Task,使用棧結構進行實現,具有後進先出的特點,創建一個Activity時,會往Task中壓入一個Actiivty,當Activity銷燬時,又會從Task中將該Activity移除,Task頂部的Activity即爲此時處於可交互狀態的Activity(running狀態)
  • 一個Task中可以存儲多個app的Activity,一個App的Activity也可以存儲在不同的Task中
1、 taskAffinity
  • 除了launchMode可以用來調配Task,的另一屬性taskAffinity,也是常常被使用。taskAffinity,是一種物以類聚的思想,它傾向於將taskAffinity屬性相同的Activity,扔進同一個Task中。
  • TaskAffinity特點如下:
    • 1、TaskAffinity參數標識着Activity所需要任務棧的名稱,默認情況下,一個應用中所有的Activity所需要的任務棧名稱都爲改應用的包名。
    • 2、taskAffinity的約束力弱於launchMode,只有當中的allowTaskReparen ting設置爲true,抑或是調用方將Intent的flag添加FLAG_ACTIVITY_NEW_TASK屬性時纔會生效,在其他情況下沒有實際意義
    • 3、TaskAffinity屬性的值不能與當前應用包名相同,否則其值跟沒有差不多

三、清除Task的三種模式
1、android:clearTaskOnLaunch
  • 這個屬性用來標記是否從task清除除根Activity之外的所有的Activity,“true”表示清除,“false”表示不清除,默認爲“false”。
  • 這裏有點我們必須要注意的,這個屬性只對任務棧內的root Activity起作用,任務棧內其他的Activity都會被忽略。
  • 如果android:clearTaskOnLaunch屬性爲“true”,每次我們重新進入這個應用時,我們只會看到根Activity,任務棧中的其他Activity都會被清除出棧。
2、android:finishOnTaskLaunch
  • finishOnTaskLaunch屬性與clearTaskOnLaunch 有些類似,它們的區別是finishOnTaskLaunch是作用在自己身上(把自己移除任務棧,不影響別的Activity),而clearTaskOnLaunch則是作用在別人身上(把別的Activity移除任務棧)
  • 如果我們把Activity的android:finishOnTaskLaunch屬性值設置爲true時,離開這個Activity所依賴的任務棧後,當我們重新返回時,該Activity將會被finish掉,而且其他Activity不會受到影響。
3、android:alwaysRetainTaskState
  • 如果當前Activity的android:alwaysRetainTaskState設置爲true時,那麼該Activity所在的任務棧將不會受到任何清理命令的影響,一直保持當前任務棧的狀態。

四、Activity的四種啓動模式
1、standard(默認):標準模式
  • 每次啓動一個Activity,都會創建一個新的Activity壓入Task中
2、singleTop:棧頂複用模式
  • 如果新啓動的activity已經存在有對應類型的實例且處於棧頂,系統此時不會創建新的Activity,而是複用棧頂的activity實例,我們如何判斷是被複用的呢?
  • 當被複用時,onNewIntent方法將會被回調。onCreate、onStart不會回調,因爲我們的Activity已經時被創建並且啓動了的,但是onResume還是會回調的哦
3、singleTask:棧內複用模式
  • 該模式爲Task棧內單例模式,task內該activity實例只會存在一個
  • 當啓動的activity恰好處於top時,行爲與singleTop一樣
  • 當啓動activity,但此時該類型的Activity實例並不處於top,此時會將該activity實例頂部的activitys都從task中移除,然後將該activity置於top
  • 複用時同樣會回調onNewIntent
4、singleInstance:單Task單例模式
  • 此模式下,系統將爲該模式的Activity創建一個單獨的Task,並且該Activity獨享該Task
五、總結
  • 從上面的小結中我們可以看出,Android的四種啓動模式的特充分利用了Task本身的特點,理解Task的工作方式更有利於我們理解Android的四種啓動模式

相關閱讀

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