Android任務棧簡介

1 各個Activity之間是通過Intent連接的,而Android系統,通過棧結構來保存整個App的Activity,棧低的元素是整個任務棧的發起者.
2 當一個App啓動的時候,當前環境中沒有該App的任務棧,則會創建一個新的任務棧,之後,這個App所啓動的所有Activity都將在這個任務棧中被管理,該棧叫Task.即表示若干個Activity的集合,他們的組合形成一個Task,它是一個先進後出的線性表.
注意:一個Task中的Activity可以來自不同的App,同一個App的Activity可能在不同的Task中.
3 Activity在一個Task中的啓動模式有兩種方法:
3.1 通過在AndroidManifest文件中的屬性launchMode來設置.
AndroidManifest的啓動模式

  • standard
    該模式下,每次點擊都會創建一個新的Activity覆蓋在原來的Activity上.
  • singleTop
    該模式下啓動一個Activity時,系統會判斷當前棧頂是否是需要啓動的這個Activity,若是,則直接複用,不需新建,若不是則會新建,比如qq消息界面,當直接複用這個Activity,系統會調用該Activity的onNewIntent()方法.
  • singleTask
    該模式下啓動一個Activity時,系統會判斷整個Activity棧中是否有需要啓動的Activity,若有,則銷燬該Activity以上所有的Activity,將自己置於棧頂.若沒有,將會新建一個這樣的Activity.
    注意:這是指在同一個App中啓動這個模式的Activity,其他的程序啓動這個模式的Activity的時候,會新建一個任務棧,但是如果這個模式的Activity已經在後臺的一個任務棧中了,在啓動這個Activity後,後臺的任務棧將會一起被切換到前臺.
  • singleInstance
    該模式下啓動一個Activity時,會新建一個任務棧,而且只保存這一個Activity.
    關於sinleTop,sinlegInstance模式的Activity使用startActivityForResult()時,系統直接返回Activity.RESULT_CANCELED,不會再去等待返回.
    3.2 通過Intent的Flag來設置
  • Intent.FLAG_ACTIVITY_NEW_TASK
    使用一個新的Task來啓動一個Activity,而且啓動的每個Activity都將在一個新的Task.適用於Service中啓動一個Activity,因爲Service中不存在Activity棧.
  • FLAG_ACTIVITY_SINGLE_TOP 類似於singletop模式
  • FLAG_ACTIVITY_CLEAR_TOP 類似於singleTask模式
  • FLAG_ACTIVITY_NO_HISTORY
    該模式下啓動的Activity再啓動其他Activity後,該Activity就消失了,不會在棧中保留.

4 清空任務棧
系統提供了清空任務棧的方法,讓我們將一個Task全部清楚,通常是通過AndroidManifeast文件中< activity>標籤中的以下屬性來設置清楚任務棧.
- clearTaskOnLaunch
在返回該模式下的Activity時,將該Activity之上的所有Activity全部清楚,這個屬性,可以讓這個Task每次在初始化的時候,都只有這一個Activity.
- finishOnTaskLaunch
通過這個屬性,在離開該模式下的Activity所處的Task,那麼用戶再返回時,該Acitivity就會被finish掉.與clearTaskOnLaunch類似,只是clearTaskOnLaunch是作用與別人身上,而finishOnTaskLaunch是作用於自己.
- alwaysRetainTaskState
該模式下的Activity所在的Task將不接受任何清楚命令,一直保持當前Task狀態.

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