android實現原理說明之一_application Intent Task Activity

來源:互聯網
上載者:User

Task

       在android中,task的定義是,多個activity協同工作來完成某一項應用的過程。注意,這裡的activity並不要求屬於同一個application。如所示,我們的task所需要的activity可能來自多個application。 

 

       activity可以看做是獨立存在於系統中,並且作為現實具體應用的主體,task將一些activity關聯起來以便實現一個更複雜的功能,一個或者多個task又可以組成一個application。這就是三者之間的關係。簡單點說,就是一個application包含一個或多個task,而一個task又包含一個或者多個activity。

      下面說一下activity和task的基本原理:

      絕大多數的application都是通過home screen的捷徑啟動的,(另一種啟動方式是通過系統的application launcher啟動)。啟動某個application之後,該application的根activity將會顯示在當前視窗,首頁activity將會隱藏到後台。

當我們在home頁中點擊email表徵圖的時候,應用中的list message activity將會顯示在當前視窗,而home activity則隱藏到了後台。按back鍵我們便可以重新返回到home頁面。

這裡要注意,應用back鍵和home鍵退出是有本質上區別的:兩者雖然都可以離開當前activity,但是back會銷毀當前activity的狀態,home則會儲存當前activity的狀態。

關於back:

       將會終止當前的activity,返回到之前的activity(如果當前的activity已經是根activity,那麼就直接返回到home screen),在這個過程中,系統會銷毀當前activity的狀態資訊,當我們再次回到這個activity時,展示給我們的將會是一個全新的activity。

 

 

 

 

我們可以看到當我們在list messages這個activity中點擊back按鈕時,我們的list messages activity將會被銷毀掉。

關於home:

 

我們可以看到,當我們通過home鍵返回home screen時,list message activity並沒有被銷毀,而是被調到了後台。這就意味著,當我們再次跳轉到該activity時,看到的還是原來的activity。

 

       當然,上面說的只是大部分的情況,世界上哪裡都存在著特例,android當然也不會例外。

       某些Activity從Background被“召喚”到foreground之後依然是相當於重新建立了新執行個體,其有區別於前邊所論述的結果。即便是暫時儲存在Background模式下(沒有被Destroied),其State資料也將丟失。例如:Contacts 和 Gallery 等。當使用者啟動了Contact應用程式,並點選某個條目查看詳細資料,如果通過Home鍵返回後,再次重複啟動Contact應用程式時,看到的並不是之前所開啟的特定條目的詳細資料,而是初始的預設介面。這個例子說明不是所有情況下通過Home鍵返回後都可以儲存當前Activity的State資訊。

       另外一種是與Back鍵有關的特殊情況。前邊提及到大部分的Activity通過Back鍵返回到Home Activity時,其自身將被徹底銷毀,預設情況下Activity響應Back按鍵的方法被定義了Destroy行為。但對於某些特別情況,開發人員可以根據需求將相應Back按鍵事件的行為重新“override”,撤消預設的Destroy行為。音樂播放器是與其相關的一個典型應用,當使用者在播放器的Root Activity中觸發Back按鍵後,轉為Background模式下繼續播放當前的音樂,同時Home Activity轉為Foreground。

       綜上所述,就一句話,對於開發人員的我們來說,開發過程中,我們是可以通過某些參數的設定來指定當使用者點擊back或者home時,到底銷毀還是不銷毀當前的activity。後邊的文章中,我們將會詳細的討論。

      

       Activity的重用:

在多個application中,我們可以都需要用到同一個activity,這時候,就牽扯到了一個有關複用的問題。

舉例說明:Contacts(電話簿)應用Gallery(畫廊)擷取映像資源。

眾所周知Contacts是手機中最常執行的 App程式,主要用於儲存目前使用者的連絡人資訊,其中需要包含連絡人的頭像資訊。在Android平台中的映像資訊是由Gallery管理,所以Contacts必然需要複用Gallery Activity來擷取相應的映像資訊。

針對於Android或者其它平台開發應用程式都需要有良好的複用性意識,這個需要貫穿於項目的整個開發過程。包括如何利用當前系統的現有資源,或者考慮到將來可能會被其它應用程式用於完成特定的需求。當使用者正在調用的Intent filter不唯一時(IntentFilter不唯一說明當前activity被多個地方使用了),系統將彈出一個供使用者選擇的對話方塊,這的確是一個完美的解決方案。

 

 

 

 

,當我們在home screen中點擊電話簿時,會進入list contacts activity,然後我們選擇查看某個人的電話資訊,這時候我們會跳轉到view Contact activity,然後我們點擊編輯資訊,又跳轉到了edit Contact activity。當我們在編輯頁面中選擇添加圖片的時候,便會調用Gallery應用中的list pictures activity,將手機中儲存的圖片展示給使用者,使用者選定一張圖片,然後跳轉到crop picture activity對圖片的大小進行剪輯……。

Activity可以共用的依據是,具有相同IntentFilter的activity是可以相互替換的。往往系統在遇見多個這種情況時,會給使用者彈出一個挑選清單,讓使用者進行選擇,使用者選擇的activity將會被載入當前線程替代原有的預設activity。

多個任務同時運行舉例:

 

我們可以看到,在statue1時,使用者通過在home screen點擊map應用的捷徑啟動了view map activity;然後使用者點擊home鍵,跳轉到state2,在state2中我們可以看到view map activity被調到了後台,當前視窗顯示的是home screen;這時使用者在home screen點擊mcalendar應用的捷徑啟動了day view activity進入state3;然後我們再次返回home screen,通過點擊map應用的表徵圖重新進入view map activity,我們可以看到當前的map和我們剛才通過home鍵離開時的map一摸一樣。這就是一個典型的多個任務同時啟動並執行例子,當我們運行一個應用的時候,另一個應用並沒有被destroyed,而是被轉移到了後台,等待再次接受調用,顯示到當前視窗。

啟動application的兩種不同方式:

每個App都需要提供至少一個Entry point(進入點)供使用者或者系統調用其所關聯的Activities,Application launcher中的小表徵圖就是每個單獨App的Entry Point。另外App也可以相互間通過Activity作為Entry Point來啟動,可以將App所包含的每個Activity看作為潛在的Entry point。

例如中的打電話應用,我們一種方法可以通過打電話的程式直接撥號;另一種是先去電話簿中找到一個電話號碼,然後通過電話簿的activity進行關聯,調用撥號程式。

Intent解析

Intent代表意圖,這個意圖的解釋有很多,我這裡說一下我個人的理解。

       記得上高中的時候,一節課要上好長時間的,時不時的就會口渴,結果非常悲劇的是我沒有帶水,於是便想問朋友借瓶水喝。可是兩個人離得比較遠,又是上課時間,我又不能弄成很大的動靜,於是我就寫了紙條扔給了我朋友,然後我很滿足的喝上了水。

       在這個例子中,我想喝水是我的一個想法,而我朋友則能給我提供水。但是光有想法和水也不行啊,我得讓我朋友知道我想喝水啊。這時候,紙條便起到了一個關鍵的作用,它記載著我想做的事情,記載著我的意圖。所以說,這裡記載著我的想法的紙條就是一個意圖。

(我們都知道意圖在我們平時的理解中代表著想法,是一種虛無縹緲的東西,怎麼就和紙條這種實體的東西等價了呢。這裡可以這麼認為,Intent可以認為是意圖的載體。)

Intent對象包含兩個元素:

1)Action :例如 查看、編輯、撥打到電話、查看映像資源等等(紙上寫的“我想喝水”)。

2)Data:提供給某種行為的具體資料(紙上寫的資訊來源等資訊,比如chenzheng_java)。

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.