Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android activity任務棧

Android activity任務棧

編輯:關於android開發

Android activity任務棧


好久沒寫博客了,腦子都秀逗了,最近比較忙,整天睡不醒,還有私信我繼續更新即時通訊的同伴們,近期可能沒戲,但是我承諾的一定完成!

任務棧,從它的名字我們就知道它有棧的特點『先進後出』,默認情況下activity的任務棧的名字就是你app的包名,當然,你也可以單獨的為你的activity指定任務棧,通過修改TaskAffinity屬性,當然不要指定成包名啦,否則跟沒指定一樣。任務棧分為前台任務棧和後台任務棧,後台任務棧中的存放的是暫停狀態下的activity,前台任務棧就是當下正在操作的任務棧啦!

下面開始啟動模式:
啟動activity可以有兩種形式,一種是設置launchMode屬性,另一種通過設置intent的flag啟動activity

launchMode

standard singleTop singleTask singleInstance

standard(標准模式)

系統默認的啟動模式,啟動一個activity時,不管這個棧中存不在這個activity,系統都會為它新建一個activity實例,壓入棧裡

singleTop(棧頂復用模式)

啟動一個activity時,如果當前的activity在棧頂,那麼系統就不會再去創建一個該Activity的實例,而是調用棧頂Activity的onNewIntent()方法

singleTask(棧內復用模式)

這個啟動模式是專門針對於啟動其他應用的activity,只有啟動其他activity的時候才會新建一個新的任務棧。系統會創建一個新的任務,並將啟動的Activity放入這個新任務的棧底位置。但是,如果現有任務當中已經存在一個該Activity的實例了,那麼系統就不會再創建一次它的實例,而是會直接調用它的onNewIntent()方法

singleInstance(單實例模式)

這種啟動模式和singleTask有點相似,只不過系統不會向聲明成singleInstance的Activity所在的任務當中再添加其它Activity。也就是說,這種Activity所在的任務中始終只會有一個Activity,通過這個Activity再打開的其它Activity也會被放入到別的任務當中

allowTaskReparenting

當把Activity的allowTaskReparenting屬性設置成true時,Activity就擁有了一個轉移所在任務的能力,當然想具有這種神器能力的前提是taskAffinity相同,感覺跟你說完這句話突然把你推到坑裡了,下面給出一個實例:app A啟動app B的activity C,按home鍵回到桌面,當你啟動app B的時候,顯示的是activity C,A啟動了C,C在A的任務棧中,但是C屬於app B並且C的taskAffinity跟B相同,所以app B啟動的時候任務棧的棧頂有個C,所以顯示的就是C了

在Intent當中,有以下幾個flag是比較常用的:

FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_SINGLE_TOP FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

FLAG_ACTIVITY_NEW_TASK

與singleTask類似,但又不完全相同,被啟動的activity運行在獨立的任務棧中

FLAG_ACTIVITY_SINGLE_TOP

這個標記位和singleTop的啟動模式相同

FLAG_ACTIVITY_CLEAR_TOP

具有此標志位的activity,當它啟動時,在同一個任務棧中所有位於它上面的activity都要出棧,這個模式一般需要和FLAG_ACTIVITY_NEW_TASK配合使用,在這種情況下被啟動的activity如果已經存在,系統就會調用onNewIntent。如果被啟動的activity采用的是標准模式,它和它之前的activity都要出棧

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

具有此標志位的activity不會出現在歷史activity的列表中,它等同於
android:excludeFromRecents=”true”

清空任務棧

如何用戶將任務切換到後台之後過了很長一段時間,系統會將這個任務中除了最底層的那個Activity之外的其它所有Activity全部清除掉。當用戶重新回到這個任務的時候,最底層的那個Activity將得到恢復。這個是系統默認的行為,因為既然過了這麼長的一段時間,用戶很有可能早就忘記了當時正在做什麼,那麼重新回到這個任務的時候,基本上應該是要去做點新的事情了。

alwaysRetainTaskState clearTaskOnLaunch finishOnTaskLaunch

alwaysRetainTaskState

如果將首頁Activity的這個屬性設置為true,任務棧所有的Activity會被繼續保留

clearTaskOnLaunch

如果將首頁Activity的這個屬性設置為true,那麼只要用戶離開了當前任務,再次返回的時候就會將最底層Activity之上的所有其它Activity全部清除掉。也就是沒次返回任務棧時都是從首頁開始

finishOnTaskLaunch

這個屬性和clearTaskOnLaunch是比較類似的,不過它不是作用於整個任務上的,而是作用於單個Activity上。如果某個Activity將這個屬性設置成true,那麼用戶一旦離開了當前任務,再次返回時這個Activity就會被清除掉

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved