[android]android Task 任務 簡介

來源:互聯網
上載者:User

標籤:

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 任務 簡介

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.