Android開發四大組件概述

這個文章主要是講Android開發的四大組件,本文主要分爲
1、Activity具體解釋
2、Service具體解釋
3、Broadcast Receiver具體解釋
4、Content Provider具體解釋

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

一、Activity數據庫

一個Activity一般展示爲一個可視化的用戶界面。好比,一個activity可能展示爲一個用戶可以選擇的菜單項列表或者展示一些圖片以及圖 片的標題。一個消息服務應用程序可能包括一個顯示聯繫人列表的activity,一個編寫信息的activity,以及其餘一些查看信息和改動應用程序設 置的activity。儘管這些activity一塊兒工做,共同組成了一個應用程序,但每一個activity都是相對獨立的。每一個activity都 是Activity(android.app.Activity)的子類。網絡

一個應用程序可能僅僅包括一個activity,或者像上面提到的消息服務程序同樣有多個activity。一個應用程序包括幾個activity以 及各個activity完畢什麼樣的功能全然取決於應用程序以及它的設計。一般每個應用程序都包括一個在應用程序啓動後第一個展示給用戶的 activity。在當前展示給用戶的activity中啓動一個新的activity,可以實現從一個activity轉換到另一個 activity。數據結構

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

展現activity窗體的可視化內容區域是一些具備層次關係(很是像數據結構中的樹)的視圖,而視圖則是由類View的子類表示的。每個視圖控制窗 口中的一個矩形區域。父視圖包括一些子視圖並管理子視圖的佈局。位於葉節點的視圖直接控制並響應用戶的動做。所以視圖就是activity與用戶交互的接 口。好比,一個顯示圖片的視圖,當用戶單擊的時候它可能會啓動一個動做。Android有不少開發者可以直接使用的視圖,包括button,文本域,滾動欄,菜 單,複選框等。異步

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

二、Service佈局

Service是Android的四大組件之中的一個,即Android系統的服務(不是一個線程,是主程序的一部分),與Activity不一樣,它是不能與用戶交互的,不能本身啓動的,需要調用Context.startService()來啓動,執行後臺,假設咱們退出應用時,Service進程並無結束,它仍然在後臺行。
spa

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

多媒體播放器播放音樂是應用service的一個很好的樣例。多媒體播放器程序可能含有一個或多個activity,用戶經過這些 activity選擇並播放音樂。然而,音樂回放並不需要一個activity來處理,因爲用戶可能會但願音樂一直播放下去,即便退出了播放器去執行其餘 程序。爲了讓音樂一直播放,多媒體播放器activity可能會啓動一個service在後臺播放音樂。Android系統會使音樂回放service一 直執行,即便在啓動這個service的activity退出以後。

應用程序可以鏈接到一個正在執行中的service。當鏈接到一個service後,可以使用這個service向外暴露的接口與這個service進行通訊。對於上面提到的播放音樂的service,這個接口可能贊成用戶暫停,中止或又一次播放音樂。

與activity以及其餘組件同樣,service相同執行在應用程序進程的主線程中。因此它們不能堵塞其餘組件或用戶界面,一般需要爲這些service派生一個線程執行耗時的任務。

三、Broadcase receiver

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


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


  有序廣播 Ordered broadcasts(用 Context.sendOrderedBroadcast()發送)每次被髮送到一個receiver。所謂有序,就是每個receiver執行後可以傳播到下一個receiver,也可以全然停止傳播--不傳播給其它receiver。 而receiver執行的順序可以經過matched intent-filter 裏面的android:priority來控制,當priority優先級一樣的時候,Receiver以隨意的順序執行。

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

四、Content provider

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

五、intent

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