{轉}Activity 、Intent深入解析[醍醐灌頂]

學習Android SDK有段時間了,對Activity 、Intent的學習與使用都比較瞭解。第一次完整的學習Activity 、Intent後,我就感覺這似乎與Windows COM技術有些似曾相識的感覺,寫了一篇將Activity 與 COM做了比較,但是一直感覺意猶未盡,前幾天在程序員雜誌中看到一篇經典的文章,茅塞頓開。

聲明:源文章來源於程序員2008年的第一期雜誌,本人將這篇文章整理後與大家分享。

首先我們來了解一個概念:Mash-up。

什麼是Mash-up?

舉個簡單的例子:從一個網頁上抓下一塊XHTML 數據,再從另一個Web Services 那裏獲得一些XML數據,就可以把這兩塊數據mash-up起來,形成新的XML數據,並且這一數據可以在此被別人mash-up。

Android、Intent的深入解析

在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文件中的<intentfilter>元素向系統註冊,表明activity具有EDIT 和VIEW文本數據的能力,如果有另一個客戶要求EDIT和VIEW一段文本數據,則系統可以調用本activity 予以滿足。Activity 本身既是提供服務的組件,也可以是組件的客戶。

例如一個備忘錄應用中,應用啓動時可以顯示一個現有備忘錄的列表,這是由一個activity 實現的。而當用戶選擇編輯或新建一個備忘時,這個activity 需要一個文本編輯器activity 來完成這項工作。它怎麼做呢?當然不需要自己從頭開發一個,而只需要以intent 的方式告訴系統說:“我需要一個具有編輯文本能力的activity 來幫我編輯一個備忘信息”,系統會自動尋找在<intentfilter>中聲稱具有該項能力的activity,然後激活這個activity,用來滿足這個intent。

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

Android-COM

Mush-up的作用

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

總結說明

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章