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有很多開發者能夠直接使用的視圖,包括button,文本域,滾動欄,菜 單,復選框等。

通過調用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對象指明了聲明的行為。比方,它能夠對全部感興趣的對象聲 明照相button被按下。
對於每種組件來說,激活的方法是不同的:
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傳遞給它們。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM