Android开发基础概念

转载网址:http://blog.chinatimes.com/tomsun/archive/2011/03/22/630351.html

『在開發實務方面, Android 手機應用程式與個人電腦的 Java 應用程式之間究竟有何不同呢?』

Android 教學 : Android 手機應用程式的重要特性

除了介面上的差異外,本講義以下歸納出最主要的六項差異:
    * Android 手機應用程式有電池續航力的限制。因此,它的應用程式不可過於耗電,亦即存取系統資源的次數不能太頻繁。
    * Android 智慧型手機硬體的主記憶體( RAM )容量、中央處理器( CPU )時脈多半比個人電腦來的小。因此,它的應用程式不能太佔系統資源。
    * Android 手機應用程式在執行時,常會面臨突然有來電( Incoming Call ),而它必須停止執行的狀況。
    * Android 手機應用程式在系統資源不足時,有時需要停止並且禮讓給比較重要的程式運行。
     * 當使用者從一個已開啟的 Android 手機應用程式切換到新開啟的 Android 手機應用程式之時間需低於一秒鐘。
     * 當 Android 智慧型手機用戶在應用程式的使用者界面當中輸入資料並執行後,應用程式必需在五秒鐘之內有所回應。否則會發生系統完全沒有回應的狀況( Application Not Responding, ANR )。

亦因如此,雖然 Android 手機應用程式相較於個人電腦上的 Java 應用程式來說,它可能有開發規模較小、開發成本較低廉並且適合微型開發團隊進行開發等優點。
但是,畢竟智慧型手機不是個人電腦。
它並沒有太多寬裕且優渥的系統資源提供給 Android 手機應用程式使用。
所以, Android 智慧型手機作業系統在應用程式的資源控管、運用與共享之上,相對於其它運行於個人電腦的應用程式來說,需要更加地嚴謹與仔細。
在此, Android 發展出一套獨有的應用程式組件( Application Components )與意圖元件 ( Intent )的程式框架。
本講義認為,應用程式組件( Application Components )與意圖元件 ( Intent )是 Android 手機應用程式開發者在學習 Android 手機應用程式開發的過程當中,最需要優先深入與徹底理解的核心開發要點。
不過,我們礙於應用程式組件( Application Components )與意圖元件 ( Intent )所要介紹的內容繁多,因此,會將第八講講義區分成上篇、中篇與下篇,本講義為第八講之上篇。
另外,關於應用程式組件( Application Components )當中的 Activity , Fragment ( Android 3.0 API 獨有) , Service , Broadcast receiver , Content provider 的深入細節與實作教學,我們則會在第八講之後,再找機會陸續向讀者朋友深入說明。
 
Android 教學 : 什麼是 Application Components 與 Intent ?

如果,您過去曾經是位 Java EE 或 Java SE 的應用程式開發人員,當您轉換跑道至 Android 撰寫 Java 程式碼時,您必然會發現到過去所熟悉的 Java 應用程式碼之啟動點 main() 方法不見了!
取而代之的就是本講義第八講這次的主題: 應用程式組件( Application Components )與意圖元件 ( Intent )之觀念。
雖然,人們要深入理解應用程式組件( Application Components )與意圖元件( Intent )的細節或許需要花一番的功夫。
不過,我們發現它們與 HTML 網頁設計的概念實然有著相互輝映之處。
因此,您或許可以從 HTML 網頁設計的概念之中,初步地理解應用程式組件( Application Components )與意圖元件( Intent )的用途與內涵。
這怎麼說呢?
如果您曾經學習過網頁設計,
那麼,請您回想一下,您的第一個網站是怎麼建構出來的呢?
您是不是先新增一個網頁做為首頁,而且通常還會在這個首頁之下,建立數個以上的子網頁。
當這些子網頁的內容都寫好後,您必然會透過超鏈結( HyperLink )的方式,將彼此以及首頁相互連結整合成一個網站。
就網路使用者的體驗來說,雖然一個網站是由眾多網頁所連結而成,但,因為有超鏈結之故,因此,它仍可以保有相當好的瀏覽流暢度。
更重要的是,對於網路使用者來說,當他進入某個擁有許多網頁的網站時,並不需要把網站中的所有網頁全部下載到電腦之中顯示。
而是,先下載顯示該網站的首頁。
之後,當他需要觀看某個網頁時,再點選該網頁的超鏈結,該網頁才會被下載顯示。
由於,早期的網路頻寬有限,因此,透過這種不需完整下載全部網頁檔案的超鏈結方式,可有效地節省頻寬下載資源。
對於, Android 手機應用程式而言,雖然它在執行階段蠻多時候並不需要網路連線,但它跟早期的網頁開發一樣具有資源有限的宿命。
因此,如果您曾深入探究 Android 手機應用程式的架構時,您必然會發現它有許多跟網頁設計雷同的作法:
    * Android 手機應用程式:它如同網站般,藉由眾多的應用程式組件( Application Components )所組合而成。
     * 應用程式組件( Application Components ):它如同網站中的網頁般,多半為彼此獨立、不相互依賴的個體。而且,它們都各自擁有特定的工作任務。
     * 意圖元件( Intent ):它則如同網頁中的超鏈結般,肩負不同應用程式組件間的連結啟動與傳遞訊息之任務。然而,意圖元件( Intent )在語法運用上跟超鏈結有很大的不同,這部份我們將在後續的講義之中進行詳述與實作教學。

由於, Android 採取應用程式組件( Application Components )與意圖元件( Intent )的架構,所以,每一個應用程式組件( Application Components )可以依實際的開發需求與使用權限而成為某個應用程式的啟始點,自然就不需要傳統 Java 應用程式所使用的單一啟始點 main() 方法了。
同時,由於智慧型手機的系統資源有限,因此,在節省系統資源的前提之下,當手機用戶每一次開啟 Android 手機應用程式時,它只會載入當下該應用程式所執行到的那個應用程式組件,而無需同一時間將應用程式當中的全部應用程式組件一併載入系統當中。(註:關於應用程式與系統執行的關係,我們將會另文專寫 Android 應用程式的處理程序( Process )與執行緒( Thread )教學講義)
亦因為 Android 是採取此種方式運行,所以, Android 針對於不同的應用程式組件特性,發展出各自不同的應用程式組件生命週期階段( LifeCycle ),藉以控制每一個應用程式組件的啟始一直到結束。(註:關於應用程式組件的生命週期,我們將會另文專寫 Android 應用程式組件的生命週期。)
另一方面,雖然我們以網站的概念做為 Android 手機應用程式的比擬。但是, Android 手機應用程式仍有許多與網站不同之處。因此, Android 再依實際的功能需求,將應用程式組件再區分為 Activity 、 Fragment ( Android 3.0 API 獨有)、 Service 、 Broadcast receiver 、 Content provider 等五大應用程式組件。
因為,本講義為求讀者不會誤解這五大應用程式組件的原始意涵,因此,我們保留其原文名稱而不進行中文名稱之翻譯。

它們的各自作用則如下所述:

Android 教學 : 什麼是 Activity ?

Activity :它負責前端使用者介面處理。
如果您曾詳閱過本講義第七講上篇與第七講下篇的話,應該會很清楚地暸解到 Activity 應用程式組件的作用在於處理 Android 手機應用程式當中的使用者介面顯示與人機互動之工作。
倘若,您對上述的講法還是很難理解。其實,您也可以把 Activity 應用程式組件所扮演的角色,想像成網站當中具有文字、圖形、動畫、影音或者表單輸入的網頁畫面。網站使用者必需要透過這些網頁畫面才可以進一步地操作它的功能。
然而, Activity 應用程式組件與網頁在開發上主要的不同點,除了它的畫面是顯示在手機螢幕之外,更重要地是它使用 XML 與 Java 程式碼,而非 HTML 等網頁相關的程式碼。
另一方面,就介面設計的角度論之,無論是網頁畫面或者 Android 手機畫面,反正只要是可以顯示在螢幕上頭提供使用者操作的畫面,我們便可稱之為使用者介面( User Interface, UI ),而讓使用者可以操作功能的行為則稱為使用者互動或人機互動( Human Computer Interaction , HCI )。
因為,這兩個要素正好就是 Activity 應用程式組件在 Android 手機應用程式開發當中所肩負的主要範疇。因此,如果您負責的是 Android 手機應用程式的介面設計工作,則您應該要對於 Activity 應用程式組件之內涵要有相當透徹的理解。
 
Android 教學 : 什麼是 Fragment ?
Fragment :它在一個具分割畫面( Multi-Pane )的 Activity 應用程式組件之中,負責分割畫面的部份區段或部份行為。
自從 Android 3.0 平板電腦作業系統在美國時間 2011年2月22日的正式問世之後, Android 應用程式組件便多了一個重要的新成員。那就是 Fragment 應用程式組件 。
Android 3.0 API 會新增此應用程式組件之原因,緣起於 Android 平板電腦的螢幕尺寸普遍大於 Android 智慧型手機的螢幕尺寸,因此,它經常需要使用到分割畫面,藉以在螢幕當中顯示更多的資訊。
然而,傳統的 Activity 應用程式組件對於分割畫面的處理並不是那麼便利。所以, Fragment 應用程式組件便孕育而生。
它主要是在一個具分割畫面的 Activity 應用程式組件之中,負責分割畫面的部份區段或部份行為。
您可以視它為 Activity 應用程式組件之下的模組單元。
Fragment 應用程式組件擁有屬於自己的生命週期,它更可以接收屬於自己的輸入事件。甚至開發者還可以單獨在執行中的 Activity 裡頭,加入或刪除某個 Fragment 。
不過, Fragment 應用程式組件仍必須依附於某個 Activity 應用程式組件當中,並不能獨立存在。而且, Fragment 應用程式組件的生命週期還是會直接受到它所依附的 Activity 應用程式組件之影響。
像是, USA TODAY for Tablet 平板電腦應用程式便是運用 Fragment 應用程式組件的方式,將新聞標題與新聞內容分割顯示。

Android 教學 : 什麼是 Service ?
Service :它負責後端程式運算。
由於, Android 智慧型手機作業系統限制手機應用程式必需在五秒鐘之內有所回應。因此, Android 手機應用程式開發者通常會將運算時間有可能超過五秒鐘且不具備使用者介面的程式片段,從 Activity 應用程式組件分割給 Service 應用程式組件負責,以避免系統完全沒有回應的狀況發生( Application Not Responding, ANR ),例如網路檔案的下載或者 MP3 音樂的背景播放等…。
假使,我們說 Activity 應用程式組件像是在劇場當中粉墨登場的演員,那麼 Service 應用程式組件必然是那些在布幕背後默默辛勤工作的場務人員。
雖然,您可能永遠看不到它們的存在,但它們卻在 Android 手機應用程式當中扮演了舉足輕重的角色。
因此,假如您希望您所開發的 Android 手機應用程式可以帶給手機用戶更好的使用者體驗,則您必需要對於 Service 應用程式組件的作用有更深刻地理解與應用。

Android 教學 : 什麼是 Content provider ?
Content provider :它負責應用程式之間資料共享的任務。
當您看到這個應用程式組件的英文名稱,可能直覺會想到它與資料庫相關。
的確,它在某部份與 Android 智慧型手機內建的 SQLite 資料庫有相關。
但,也不全然是…。
這怎麼說呢?打個比方好了!
其實,您可以把 Content provider 應用程式組件想像成臺北市政府的「1999臺北市民當家熱線」。
假若您是臺北市民,當您家有大型廢棄家具要委由市府清潔隊丟棄時,並不需要直接打電話給清潔隊人員。
而是,您只要撥打「1999臺北市民當家熱線」,該熱線的人員便可以幫您聯繫清潔隊人員,並且開始為此事進行相關的處理程序。
Content provider 應用程式組件在概念層次與「1999臺北市民當家熱線」十分雷同。
Content provider 應用程式組件本身並非是直接存取 SQLite 資料庫的方法。而是做為 Android 手機應用程式間的資料共享之統一窗口。
它就像「1999臺北市民當家熱線」並非是清潔隊,但他們卻可以提供一套所有臺北市市民都可以共享的便民服務,透過這項服務來幫您聯繫與協調市府相關部門的人員。
更簡而言之, Content provider 應用程式組件只是一個資料共享的統一窗口,它並非直接的資料來源。
所以,通常來說,您必需在建立完應用程式的 SQLite 資料庫後,才可以建立屬於自己的 Content provider 應用程式組件。
另外,在建立 Content provider 應用程式組件之後,它會附帶一個公開的統一資源識別位址 ( Universal Resource Identifier , URI )。
對於 Android 手機應用程式來說,當它要共享資料時,無需知道對方的資料來源是何種型態?它僅需得知對方資料來源的 URI ,並在該資料來源有開放權限的情況下,即可透過 Content provider 應用程式組件的相關方法進行資料管理的增刪改查之動作。
在此要提醒您的是: Content provider 應用程式組件可應用之範疇並非僅限於 SQLite 資料庫。亦包括了檔案系統、網際網路上的資料來源、或者您的 Android 手機應用程式原本就可以存取的持久性儲存位置。
像是 Android 作業系統本身所提供的聯絡人應用程式,便具有 Content provider 應用程式組件的 URI ,因此,在存取權限足夠的前題之下,您的應用程式也可以存取手機之中的聯絡人相關資料。
另一方面,如果 Android 手機應用程式當中的資料來源不需要與其它 Android 手機應用程式共享時,那麼您可以直接使用該資料來源之相關存取方法,而不要使用 Content provider 應用程式組件。
 
Android 教學 : 什麼是 Broadcast receivers ?
Broadcast receivers :此應用程式組件的中文譯名,多半會翻成廣播接收者或者廣播接收器。
嘿!不過,它可不是讓您在 Android 智慧型手機聽電台廣播之用哦…^_^
其實, Broadcast receivers 應用程式組件最主要的用途在於:捕捉智慧型手機當中系統所發出來的重要事件訊息。
比如,手機快沒電了、您有一封新簡訊、或者某個電話號碼撥打進來所產生的系統訊息…。
說到此,您或許會有個疑問:『取得這些系統訊息,能做什麼呢?』
舉例言之。
例如,您想設計一個 Android 手機應用程式是:當手機用戶遺失手機後,他只需要寄發一則重要簡訊給那隻遺失的手機,便可以馬上把您的手機上鎖,以避免小偷任意竊取裡頭的一些重要相片或資料。
此時,您就可以在該應用程式之中,使用 Broadcast receivers 應用程式組件來協助應用程式捕捉那則重要簡訊的系統訊息,並且進行手機上鎖的動作。
在此要特別強調地是, Broadcast receivers 應用程式組件跟 Service 應用程式組件一樣並不具備使用者介面,您可以視情況再配合狀態列( Status Bar )等方式來呈現它所接收到的訊息。
另外, Broadcast receivers 應用程式組件通常會再結合 Service 應用程式組件在程式後端執行相關的關鍵動作。
同時, Broadcast receivers 應用程式組件也可以透過意圖元件( Intent )來傳送應用程式本身的系統訊息。

posted @ 2012-05-16 17:43  日光之下无新事  阅读(197)  评论(0编辑  收藏  举报