Android的四大組件:Activity、Service、BroadcastReceiver、Content Provider。
Content Provider 屬於Android應用程序的組件之一,作為應用程序之間唯一的共享數據的途徑,Content Provider 主要的功能就是存儲並檢索數據以及向其他應用程序提供訪問數據的接口
① Activity是Android應用中負責與用戶交互的組件——大致上把它想象成Swing編程中的JFrame控件。不過它與JFrame的區別在於:JFrame本身可以設置布局管理器,不斷地向JFrame中添加組件,但Activity只能通過setContentView(View)來顯示指定組件。
Activity為Android應用提供里可視化用戶界面,如果該Android應用需要多個用戶界面,那么這個Android應用將會包含多個Activity,多個Activity組成Activity棧。當前活動的Activity位於棧頂。
View組件是所有UI控件、容器控件的基類,View組件就是Android應用中用戶實實在在看到的部分。但View組件需要放到容器組件中,或者使用Activity將它顯示出來。如果需要通過某個Activity把指定View顯示出來,調用Activity的setContentView()方法即可。
② Service與Activity的地位是並列的,它也代表一個單獨的Android組件。Service與Activity的區別在於:Service通常位於后台運行,它一般不需要與用戶交互,因此Service組件沒有圖形用戶界面。Service組件需要繼承Service基類。一個Service組件被運行起來之后,它將擁有自己獨立的生命周期,Service組件通常用於為其他組件提供后台服務或監控其他組件的運行狀態。
③ BroadcastReceiver是Android應用中另一個重要的組件,BroadcastReceiver代表廣播消息接收器。從代碼實現角度來看,BroadcastReceiver非常類似於事件編程中的監聽器。與普通事件監聽器不同的是:普通事件監聽器監聽的事件源是程序中的對象;而BroadcastReceiver監聽的事件源Android應用中的其他組件。使用BroadcastReceiver組件接收廣播消息比較簡單,開發者只要實現自己的BroadcastReceiver子類,並重寫onReceive(Context context,Intent intent)方法即可。當其他組件通過sendBroadcast()、sendStickyBroadcst()或sendOrderedBroadcast()方法發送廣播時,如該BroadcastReceiver也對該消息“感興趣”(通過IntentFilter配置),BroadcastReceiver的onReceive(Context context,Intent intent)方法將會被觸發。 開發者實現里自己的BroadcastReceiver之后,通常有兩種方式來注冊這個系統級的“事件監聽器”。
-->在Java代碼中通過Context.registReceiver()方法注冊BroadcastReceiver。
-->在AndroidManifest.xml文件中使用<receiver……>元素完成注冊。
④ ContentProvider 對於Android應用而言,組件必須相互獨立,如果這些Android應用之間需要實現實時的數據交換。例如我們開發里一個發送短信的程序,當發送短信時需要從聯系人管理應用中讀取指定聯系人的數據----這就需要多個應用程序之間進行實時的數據交換。
Android系統為這種跨應用的數據交換提供里一個標准,ContentProvider。當用戶實現自己的ContentProvider時,需要實現如下抽象方法。
Insert(Uri, ContentValues):向ContentProvider插入數據。
Deleter(Uri,ContentValues):刪除ContentProvdier中指定數據。
Update(Uri, ContentValues, String, String[] ):更新ContentProvider中指定數據。
Query(Uri, String[], String, String[], String):從ContentProvider查詢數據。
通常與ContentProvider結合使用的是ContentResolver,一個應用程序使用ContentProvider暴露自己的數據,而另一個應用程序則通過ContentResoler來訪問數據。
Intent和IntentFilter 嚴格的說,Intent並不是Android的組件,但它對於Android應用的作用非常大----它是Android應用內不同組件之間通信的載體。當Android運行時需要連接不同的組件時,通常就需要借助於Intent來實現。Intent可以啟動應用中另一個Activity,Service,BroadcastReceiver。