Activity Intent深入解析

2021-05-22 02:00:27 字數 1827 閱讀 5029

學習android sdk有段時間了,對activity 、intent的學習與使用都比較了解。第一次完整的學習activity 、intent後,我就感覺這似乎與windows com技術有些似曾相識的感覺,寫了一篇將activity 與 com

做了比較,但是一直感覺意猶未盡,前幾天在程式設計師雜誌中看到一篇經典的文章,茅塞頓開。

首先我們來了解乙個概念:mash-up。

舉個簡單的例子:從乙個網頁上抓下一塊xhtml 資料,再從另乙個web services 那裡獲得一些xml資料,就可以把這兩塊資料mash-up起來,形成新的xml資料,並且這一資料可以在此被別人mash-up。

在android軟體環境中,應用程式是由一組activities 組成的,而每乙個activity 不但是本應用的組成部分,而且也對外開放,可以向同一系統內任何乙個外部應用提供服務。例如,編制手機簡訊無疑需要乙個小型編輯器,這個編輯器在android中由乙個activity 實現,並且可以以構件的形式暴露出來。如果開發者在開發另外乙個應用程式的過程中需要乙個小型編輯器,則無須重新開發,可直接呼叫簡訊應用中的這個編輯器activity 得以實現。這種多層次的組合能力,與web 2.0 基於xml的mash-up如出一轍。

android 呼叫activity 所提供的介面(服務),並不是直接呼叫,而是借助乙個叫做intent 的機制實現的。所謂intent 就是對於服務的呼叫請求。與其他技術體系不同的是,android可以無須明確地指定要那個組(activity)來滿足自己的呼叫請求,而是可以要求系統根據它的要求,自動選擇乙個能夠滿足要求的activity 來提供所需的服務。

大致的過程如下:每乙個activity 都可以對外提供一系列的服務,這些服務以intent-filter 的形式對外公開,並提交給系統進行註冊。所謂intent-filter,就是乙個activity 的能力列表。例如,乙個用於編輯簡訊正文的文字編輯器activity 應通過androidmanifest.xml檔案中的元素向系統註冊,表明activity具有edit 和view文字資料的能力,如果有另乙個客戶要求edit和view一段文字資料,則系統可以呼叫本activity 予以滿足。activity 本身既是提供服務的元件,也可以是元件的客戶。

例如乙個備忘錄應用中,應用啟動時可以顯示乙個現有備忘錄的列表,這是由乙個activity 實現的。而當使用者選擇編輯或新建乙個備忘時,這個activity 需要乙個文字編輯器activity 來完成這項工作。它怎麼做呢?當然不需要自己從頭開發乙個,而只需要以intent 的方式告訴系統說:「我需要乙個具有編輯文字能力的activity 來幫我編輯乙個備忘資訊」,系統會自動尋找在中聲稱具有該項能力的activity,然後啟用這個activity,用來滿足這個intent。

windows平台的開發人員會發現,上述的工作方式與com 很相近,2者的比較如下圖所示:

mush-up的作用

如果android 平台提供的基礎構件足夠豐富,則開發新的應用程式將變得高度簡化:開發者可以利用現activities 快速組合出應用程式的主體,只有程式的特色功能需要親自實現,這無疑極大地提公升了生產力和軟體質量。不但如此,新實現的activities 也可以作為其他應用的構件而被再次組合。

mash-up 是web 2.0 平台上的關鍵技術概念之一。android 平台在技術上的最大亮點,就是將mash-up 技術引入了手機作業系統。實際上以現有成熟構件為基礎,通過組合方式快速構造和開發新應用,這樣的想法並非android 首創,在windows系統中的com技術就是這種思想的體現。

android之父曾經特別強調過:android吸收了從com構件體系到web 2.0等技術體系的思想精髓,實現了多處技術創新,其中尤以應用程式級別的mash-up為最令他自豪的特性。

Activity intent經常使用的 FLAG

intent.flag activity new task 預設的跳轉型別,會重新建立乙個新的activity,不過與這種情況,比方說task1中有a,b,c三個activity,此時在c中啟動d的話,如果在manifest.xml檔案中給d新增了affinity的值和task中的不一樣的話,則會在...

js深轉殖深拷貝

不足之處是不能拷貝函式,但是基本夠用 const deepcopy obj json parse json stringify obj 如果涉及拷貝函式 簡單一點 function copy object for const k,v of object.entries object return o...

8位深 16位深 24位深

乙個畫素用多少位表示,例如,乙個畫素點,用1位資料表示的話,它有兩種顏色可以選擇 2的1次方,黑白兩種 如乙個畫素點,用8位的資料表示的話,這個點可以有2的8次方 256 種顏色的選擇,同理,16 24等。8位rgb影象 16位rgb影象 這裡的8位是針對rgb影象而言,rgb影象由三個顏色通道組成...