Android 手機作業系統是一款開源的系統。對編程有所瞭解的朋友們可以通過各種編寫方式來使這款系統應用於手機中來滿足各種需求。下面我們將會對Android組件的一些概念進行一個總結,以方便大家的學習。
- Android本地廣播相關操作分析
- Android Widget工具箱
- Android菜單系統基本概念詳解
- Android Intent應用實踐經驗總結
- Android資料庫工作方式解析
Android的一個核心特性就是,一個應用程式能利用另外應用程式的元素(假如這些應用程式允許這樣做)。舉個例子,如果你的程式需要展示一個可以滾動的圖片列表,正好有另外一個程式已經有這樣一個合適的捲軸並且也允許其他程式使用,那麼你就可以使用這個捲軸來完成你的工作,而不是開發你自己的。你的應用不需要內含其他應用的代碼或者串連到他。相反,它只是簡單的啟動了需要的部分。
為了讓這個特效能夠工作,系統必須能夠實現運行一個部分組件被需要的應用,並為那個部分執行個體化一個Java對象。因此,與大多數系統上的應用不一樣,Android應用沒有為應用中的任何部分提供一個單一的入口比如說,沒有main()函數)。相反的,他們用系統能執行個體和啟動並執行本質組件。下面是4種組件:
Android組件之Activities
一個活動為一個具有焦點、使用者可以操作的行為展示了一個可視化的使用者介面。舉例,一個活動可以展示一個使用者可以選擇的菜單選項列表,或者展示有字幕的照片。一個文字簡訊應用可能有一個用來展示可以選擇傳送簡訊連絡人清單的活動,一個用來給這個選擇的連絡人寫簡訊的活動,其他用來查看以前的簡訊和改變設定的一些活動。雖然他們一起工作,構成了一個聯絡緊密的使用者介面,每一個活動相對於其他活動卻是獨立的。每一個活動都是繼承於基類Activity。
一個應用可以只有一個活動,或者就像上面的文字簡訊應用一樣,可以有幾個。這些活動是什麼,有多少,當然,取決於應用程式和他的設計。典型的,這些活動中的一個Activity被標記為程式啟動後第一個呈現在使用者眼前。從一個活動轉到另外一個活動只是在當前的活動啟動下一個。
每一個活動都被給與一個預設的視窗用來繪製。典型的,這個視窗填充了整個螢幕,但是他可以比這個視窗小,漂浮在其他視窗之上。一個活動也可利用額外的視窗。舉例,一個彈出的對話方塊等待使用者的反應,出現在這個活動的中間,或者當使用者在螢幕上選擇特別的選擇時的一個位使用者展示重要訊息的視窗。
這個視覺上的視窗的內容由一套視圖提供,繼承於基類View的執行個體。每一個視圖控制一個在視窗內的特殊的矩形空間。父類別檢視包含並安排了子類的布局。在這套視圖體系底部的視圖在他們所控制的矩形空間中繪製,並對使用者直接對這個空間的行為作出反應。因此,視圖就是使用者行為發生互動的地方。舉例,一個視圖可能展示了一個很小的映像,並在使用者觸摸這個圖片時建立了一個動作。Android有大量的已經完成,你可以使用的視圖,包括按鈕,文字框,捲軸,功能表項目,複選框…。
一套視圖通過Activity.setContentView()填充到Activity所在表單中。這個內容視圖使這套體系的根視圖。
Android組件之Services
服務不需要可視化的使用者介面,相反在一段不確定的時間段裡運行在後台。舉例,當使用者在處理其他問題時,服務可以播放背景音樂,或者他可以從網上擷取資料,計算,提高,提供給活動所需要的結果。每個服務繼承於服務基類。
一個基本的例子就是媒體播放器播放清單中的歌曲。播放應用程式可能會有一個或多個活動,允許使用者選擇歌曲並播放它們。但是,音樂回放不會被一個活動處理,因為使用者期望音樂在他們離開這個播放程式介面後仍能播放。為了滿足這個要求,這個播放活動應該開啟一個在後台啟動並執行服務。系統就能繼續播放音樂,即使使用者選擇播放音樂後離開了這個介面。
可以實現串連到綁定到)一個正在啟動並執行服務也可以開啟一個當前沒有啟動並執行服務)。串連之後,你可以通過系統給出的一個介面與這個服務進行通訊。對於這個音樂服務,這個借口可以允許使用者去暫停,倒退,停止,重放和回放。
就像活動和其他的組件,服務運行在應用程式進程中的主線程中。因此,他們不會阻塞到其他組件或者使用者介面,服務通常會產生其他線程用來做那些耗時間的任務就像音樂播放一樣)。
Android組件之Broadcast receivers
廣播接收器只能接收廣播,對廣播的通知做出反應。很多廣播都產生於系統代碼--舉例,時區改變的通知,電池電量不足,照了一張相片,或者使用者改變了語言偏好。應用也可以發出廣播--舉例,讓其他應用知道已從網上下載了一些資料,並且它們可以使用這些資料。
一個應用可以有很多廣播接收器來對它認為重要的通知做出反應。所有的接收器繼承於BroadcastReceiver基類。
廣播接收器不展示一個使用者介面。但是,它們可以為他們接收到得資訊啟動一個活動,或者它們可以使用NotificationManager來通知使用者。通知可以以不同形式得到使用者的注意--閃爍背景燈,震動手機,發出聲音,等等。它們通常在狀態列上放置一個暫時的表徵圖,使用者可以通過開啟這個表徵圖擷取資訊。
Android組件之Content providers
內容提供者提供了一套特殊的可供其他應用使用的資料。這些資料可以儲存在檔案系統中,SQLite資料庫中,或者其他有意義的形式。內容提供者繼承於ContentProvider基類,實現了一套標準的允許其他使用者檢索,儲存資料的方法。但是,應用程式並不能直接使用這些方法。他們必須使用ContentProvider的執行個體,調用它的方法。ContentResolver可以與任何內容提供者交流,他們之間的合作可以管理進程間的通訊。
不管什麼時候有一個需要被一個特殊的Android組件處理的請求,Android確保這個應用組件的進程在運行中,如果有需要就啟動它,確保組件的合適的執行個體是可用的,如有需要就執行個體化它。