Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發四大組件概述

Android開發四大組件概述

編輯:關於Android編程

這個文章主要是講Android開發的四大組件,本文主要分為
一、Activity詳解
二、Service詳解
三、Broadcast Receiver詳解
四、Content Provider詳解

外加一個重要組件 intent的詳解。(主要來自於網絡)

1、Activity

一個Activity通常展現為一個可視化的用戶界面。例如,一個activity可能展現為一個用戶可以選擇的菜單項列表或者展現一些圖片以及圖 片的標題。一個消息服務應用程序可能包含一個顯示聯系人列表的activity,一個編寫信息的activity,以及其它一些查看信息和修改應用程序設 置的activity。雖然這些activity一起工作,共同組成了一個應用程序,但每一個activity都是相對獨立的。每一個activity都 是Activity(android.app.Activity)的子類。

一個應用程序可能只包含一個activity,或者像上面提到的消息服務程序一樣有多個activity。一個應用程序包含幾個activity以 及各個activity完成什麼樣的功能完全取決於應用程序以及它的設計。通常每個應用程序都包含一個在應用程序啟動後第一個展現給用戶的 activity。在當前展現給用戶的activity中啟動一個新的activity,可以實現從一個activity轉換到另外一個 activity。

每個activity都會有一個用於繪制用戶界面的窗口。通常這樣一個窗口會填充整個屏幕,當然這個窗口也可以比屏幕小並漂浮在其他窗口之上。 activity還可以使用一些額外的窗口,例如一個要求用戶響應的彈出式對話框,或者是當用戶在屏幕上選擇一個條目後向用戶展現一些重要信息的窗口。

展示activity窗口的可視化內容區域是一些具有層次關系(很像數據結構中的樹)的視圖,而視圖則是由類View的子類表示的。每個視圖控制窗 口中的一個矩形區域。父視圖包含一些子視圖並管理子視圖的布局。位於葉節點的視圖直接控制並響應用戶的動作。因此視圖就是activity與用戶交互的接 口。例如,一個顯示圖片的視圖,當用戶單擊的時候它可能會啟動一個動作。Android有許多開發人員可以直接使用的視圖,包括按鈕,文本域,滾動條,菜 單,復選框等。

通過調用Activity.setContentView()方法來設置展現activity的窗口的視圖。內容視圖則是視圖層次結構中的根節點視圖。

2、Service

Service是Android的四大組件之一,即Android系統的服務(不是一個線程,是主程序的一部分),與Activity不同,它是不能與用戶交互的,不能自己啟動的,需要調用Context.startService()來啟動,運行後台,如果我們退出應用時,Service進程並沒有結束,它仍然在後台行。

service沒有用戶界面,但它會在後台一直運行。例如,service可能在用戶處理其它事情的時候播放背景音樂,或者從網絡上獲取數據,或者執行一些運算,並把運算結構提供給activity展示給用戶。每個service都擴展自類Serivce。

多媒體播放器播放音樂是應用service的一個非常好的例子。多媒體播放器程序可能含有一個或多個activity,用戶通過這些 activity選擇並播放音樂。然而,音樂回放並不需要一個activity來處理,因為用戶可能會希望音樂一直播放下去,即使退出了播放器去執行其它 程序。為了讓音樂一直播放,多媒體播放器activity可能會啟動一個service在後台播放音樂。Android系統會使音樂回放service一 直運行,即使在啟動這個service的activity退出之後。

應用程序可以連接到一個正在運行中的service。當連接到一個service後,可以使用這個service向外暴露的接口與這個service進行通信。對於上面提到的播放音樂的service,這個接口可能允許用戶暫停,停止或重新播放音樂。

與activity以及其它組件一樣,service同樣運行在應用程序進程的主線程中。所以它們不能阻塞其它組件或用戶界面,通常需要為這些service派生一個線程執行耗時的任務。

3、Broadcase receiver

1、BroadcastReceiver 用於異步接收廣播Intent。主要有兩大類,用於接收廣播的:


  正常廣播 Normal broadcasts(用 Context.sendBroadcast()發送)是完全異步的。它們都運行在一個未定義的順序,通常是在同一時間。這樣會更有效,但意味著receiver不能包含所要使用的結果或中止的API。


  有序廣播 Ordered broadcasts(用 Context.sendOrderedBroadcast()發送)每次被發送到一個receiver。所謂有序,就是每個receiver執行後可以傳播到下一個receiver,也可以完全中止傳播--不傳播給其他receiver。 而receiver運行的順序可以通過matched intent-filter 裡面的android:priority來控制,當priority優先級相同的時候,Receiver以任意的順序運行。

2、廣播接收器是一個專注於接收廣播通知信息,並做出對應處理的組件。很多廣播是源自於系統代碼的──比如,通知時區改變、電池電量低、拍攝了一張照片或者用戶改變了語言選項。應用程序也可以進行廣播──比如說,通知其它應用程序一些數據下載完成並處於可用狀態。
3、應用程序可以擁有任意數量的廣播接收器以對所有它感興趣的通知信息予以響應。所有的接收器均繼承自BroadcastReceiver基類。
4、廣播接收器沒有用戶界面。然而,它們可以啟動一個activity來響應它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等等。一般來說是在狀態欄上放一個持久的圖標,用戶可以打開它並獲取消息。

4、Content provider

ContentProvider(內容提供者)是Android中的四大組件之一。主要用於對外共享數據,也就是通過ContentProvider把應用中的數據共享給其他應用訪問,其他應用可以通過ContentProvider對指定應用中的數據進行操作。ContentProvider分為系統的和自定義的,系統的也就是例如聯系人,圖片等數據。
以下這段是Google Doc中對ContentProvider的大致概述。
內容提供者將一些特定的應用程序數據供給其它應用程序使用。數據可以存儲於文件系統、SQLite數據庫或其它方式。內容提供者繼承於ContentProvider 基類,為其它應用程序取用和存儲它管理的數據實現了一套標准方法。然而,應用程序並不直接調用這些方法,而是使用一個 ContentResolver 對象,調用它的方法作為替代。ContentResolver可以與任意內容提供者進行會話,與其合作來對所有相關交互通訊進行管理。

5、intent

當接收到ContentResolver發出的請求後,內容提供者被激活。而其它三種組件──activity、服務和廣播接收器被一種叫做intent的異步消息所激活。intent是一個保存著消息內容的Intent對 象。對於activity和服務來說,它指明了請求的操作名稱以及作為操作對象的數據的URI和其它一些信息。比如說,它可以承載對一個activity 的請求,讓它為用戶顯示一張圖片,或者讓用戶編輯一些文本。而對於廣播接收器而言,Intent對象指明了聲明的行為。比如,它可以對所有感興趣的對象聲 明照相按鈕被按下。
對於每種組件來說,激活的方法是不同的:
1、通過傳遞一個Intent對象至 Context.startActivity()或Activity.startActivityForResult()以載入(或指定新工作給)一個activity。相應的activity可以通過調用 getIntent() 方法來查看激活它的intent。Android通過調用activity的onNewIntent()方法來傳遞給它繼發的intent。
一個activity經常啟動了下一個。如果它期望它所啟動的那個activity返回一個結果,它會以調用startActivityForResult()來取代startActivity()。比如說,如果它啟動了另外一個activity以使用戶挑選一張照片,它也許想知道哪張照片被選中了。結果將會被封裝在一個Intent對象中,並傳遞給發出調用的activity的onActivityResult() 方法。
2、通過傳遞一個Intent對象至Context.startService()將啟動一個服務(或給予正在運行的服務以一個新的指令)。Android調用服務的onStart()方法並將Intent對象傳遞給它。
與此類似,一個Intent可以被調用組件傳遞給 Context.bindService()以獲取一個正在運行的目標服務的連接。這個服務會經由onBind() 方法的調用獲取這個Intent對象(如果服務尚未啟動,bindService()會先啟動它)。比如說,一個activity可以連接至前述的音樂回放服務,並提供給用戶一個可操作的(用戶界面)以對回放進行控制。這個activity可以調用 bindService() 來建立連接,然後調用服務中定義的對象來影響回放。
3、應用程序可以憑借將Intent對象傳遞給 Context.sendBroadcast() ,Context.sendOrderedBroadcast(), 以及Context.sendStickyBroadcast()和其它類似方法來產生一個廣播。Android會調用所有對此廣播有興趣的廣播接收器的 onReceive()方法將intent傳遞給它們。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved