標籤:
http://blog.csdn.net/guomeijuan916/article/details/8121468
關於Android中的組件和應用,之前涉及,大都是靜態概念。而當一個應用運行起來,就難免會需要關心進程、線程這樣的概念。在Android中,組件的動態運行,有一個最與眾不同的概念,就是Task,翻譯成任務,應該還是比較順理成章的。 Task的介入,最主要的作用,是將組件之間的串連,從進程概念的細節中剝離出來,可以以一種不同模型的東西進行配置,在很多時候,能夠簡化上層開發人員的理解難度,協助大家更好的進行開發和配置
任務
在 SDK中關於Task(guide/topics/fundamentals.html#acttask),有一個很好的比方,說,Task就相當於應用(application)的概念。在開發人員眼中,開發一個Android程式,是做一個個獨門獨戶的組件,但對於一般使用者而言,它們感知到的,只是一個運行起來的整體應用,這個整體背後,就是Task。 Task,簡單的說,就是一組以棧的模式聚集在一起的Activity組件集合。它們有潛在的前後驅關聯,新加入的Activity組件,位於棧頂,並僅有在棧頂的Activity,才會有機會與使用者進行互動。而當棧頂的 Activity完成使命退出的時候,Task會將其退棧,並讓下一個將跑到棧頂的Activity來於使用者面對面,直至棧中再無更多 Activity,Task結束
事件 Task棧
點開Email應用,進入收件匣(Activity A) A
選中一封郵件,點擊查看詳情(Activity B) AB
點擊回複,開始寫新郵件(Activity C) ABC
寫了幾行字,點擊選擇連絡人,進入選擇連絡人介面(Activity D) ABCD
選擇好了連絡人,繼續寫郵件 ABC
寫好郵件,發送完成,回到原始郵件 AB
點擊返回,回到收件匣 A
退出Email程式 null
如上表所示,是一個執行個體。從使用者從進入郵箱開始,到回複完成,退出應用整個過程的Task棧變化。這是一個標準的棧模式,對於大部分的狀況,這樣的Task 模型,足以應付,但是,涉及到實際的效能、開銷等問題,就會變得殘酷許多。比如,啟動一個瀏覽器,在Android中是一個比較沉重的過程,它需要做很多初始化的工作,並且會有不小的記憶體開銷。但與此同時,用瀏覽器開啟一些內容,又是一般應用都會有的一個需求。設想一下,如果同時有十個運行著的應用(就會對應著是多個Task),都需要啟動瀏覽器,這將是一個多麼殘酷的場面,十個Task棧都堆積著很雷同的瀏覽器Activity,是多麼華麗的一種浪費啊。於是你會有這樣一種設想,瀏覽器Activity,可不可以作為一個單獨的Task而存在,不管是來自那個Task的請求,瀏覽器的Task,都不會歸併過去。這樣,雖然瀏覽器Activity本身需要維繫的狀態更多了,但整體的開銷將大大的減少,這種舍小家為大家的行為,還是很值得歌頌的
LaunchMode(啟動模式)
1、標準模式
1)從task中啟動Activity時,該Activity的新執行個體總是在當前
task中建立
2)每次啟動Activity,都會建立該Activity類的新執行個體
3)一個task中可以存在同一Activity的多個執行個體
4)一個Activity的多個執行個體可以出現在多個task棧中
2、singleTop
1)如果啟動模式設定為singleTop的Activity執行個體未處於棧頂,
則其表現與啟動模式設定為standard的Activity的表現一致
2)如果啟動模式設定為singleTop的Activity的執行個體位於任務棧的棧頂
則,不會建立該Activity的新執行個體。只是調用位於棧頂的該Activity
執行個體的onNewIntent方法,將新的intent傳遞給該執行個體。
3、singleTask
1)設定為singleTask的Activity,具有全域唯一性,在Android系統中
只能建立該Activity的一個執行個體。
2)如果啟動s設定為singleTask的Activity時,已經存在該Activity的
執行個體,則將該執行個體之上的所有Activity執行個體釋放,將該執行個體重新帶回到
棧頂,並調用器onNewIntent方法,將新的intent傳遞給該執行個體
3)在建立設定為singleTask模式的Activity的執行個體時,如果當前task的
taskAffinity與該Activity的taskAffinity一致,則直接在當前task中
建立;如果當前task的taskAffinity值與該Activity的taskAffinity不一致
則在新的任務中建立該Activity的執行個體。
4、singleInstance
1)當建立設定為singleInstance模式的Activity時,總是在新的任務中建立
2)設定為SingleInstance模式的Activity,具有全域唯一性。在Android系統
中只能存在該Activity的一個執行個體
3)設定為singleInstance模式的Activity,總是單獨在一個task中存在
也就是說在該Activity所在的task棧中不可能存在其他的activity
[android]android Task 任務 簡介