天天看點

Android中四大元件總結

android四大元件分别為activity、service、content provider、broadcast receiver。

一、android四大元件詳解

1、activity

(1)一個Activity通常就是一個單獨的螢幕(視窗)。

(2)Activity之間通過Intent進行通信。

(3)android應用中每一個Activity都必須要在AndroidManifest.xml配置檔案中聲明,否則系統将不識别也不執行該Activity。

2、service

(1)service用于在背景完成使用者指定的操作。service分為兩種:

(a)started(啟動):當應用程式元件(如activity)調用startService()方法啟動服務時,服務處于started狀态。

(b)bound(綁定):當應用程式元件調用bindService()方法綁定到服務時,服務處于bound狀态。

(2)startService()與bindService()差別:

(a)started service(啟動服務)是由其他元件調用startService()方法啟動的,這導緻服務的onStartCommand()方法被調用。當服務是started狀态時,其生命周期與啟動它的元件無關,并且可以在背景無限期運作,即使啟動服務的元件已經被銷毀。是以,服務需要在完成任務後調用stopSelf()方法停止,或者由其他元件調用stopService()方法停止。

(b)使用bindService()方法啟用服務,調用者與服務綁定在了一起,調用者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點。

(3)開發人員需要在應用程式配置檔案中聲明全部的service,使用<service></service>标簽。

(4)Service通常位于背景運作,它一般不需要與使用者互動,是以Service元件沒有圖形使用者界面。Service元件需要繼承Service基類。Service元件通常用于為其他元件提供背景服務或監控其他元件的運作狀态。

3、content provider

(1)android平台提供了Content Provider使一個應用程式的指定資料集提供給其他應用程式。其他應用可以通過ContentResolver類從該内容提供者中擷取或存入資料。

(2)隻有需要在多個應用程式間共享資料是才需要内容提供者。例如,通訊錄資料被多個應用程式使用,且必須存儲在一個内容提供者中。它的好處是統一資料通路方式。

(3)ContentProvider實作資料共享。ContentProvider用于儲存和擷取資料,并使其對所有應用程式可見。這是不同應用程式間共享資料的唯一方式,因為android沒有提供所有應用共同通路的公共存儲區。

(4)開發人員不會直接使用ContentProvider類的對象,大多數是通過ContentResolver對象實作對ContentProvider的操作。

(5)ContentProvider使用URI來唯一辨別其資料集,這裡的URI以content://作為字首,表示該資料由ContentProvider來管理。

4、broadcast receiver

(1)你的應用可以使用它對外部事件進行過濾,隻對感興趣的外部事件(如當電話呼入時,或者資料網絡可用時)進行接收并做出響應。廣播接收器沒有使用者界面。然而,它們可以啟動一個activity或serice來響應它們收到的資訊,或者用NotificationManager來通知使用者。通知可以用很多種方式來吸引使用者的注意力,例如閃動背燈、震動、播放聲音等。一般來說是在狀态欄上放一個持久的圖示,使用者可以打開它并擷取消息。

(2)廣播接收者的注冊有兩種方法,分别是程式動态注冊和AndroidManifest檔案中進行靜态注冊。

(3)動态注冊廣播接收器特點是當用來注冊的Activity關掉後,廣播也就失效了。靜态注冊無需擔憂廣播接收器是否被關閉,隻要裝置是開啟狀态,廣播接收器也是打開着的。也就是說哪怕app本身未啟動,該app訂閱的廣播在觸發時也會對它起作用。

二、android四大元件總結:

(1)4大元件的注冊

4大基本元件都需要注冊才能使用,每個Activity、service、Content Provider都需要在AndroidManifest檔案中進行配置。AndroidManifest檔案中未進行聲明的activity、服務以及内容提供者将不為系統所見,進而也就不可用。而broadcast receiver廣播接收者的注冊分靜态注冊(在AndroidManifest檔案中進行配置)和通過代碼動态建立并以調用Context.registerReceiver()的方式注冊至系統。需要注意的是在AndroidManifest檔案中進行配置的廣播接收者會随系統的啟動而一直處于活躍狀态,隻要接收到感興趣的廣播就會觸發(即使程式未運作)。

(2)4大元件的激活

内容提供者的激活:當接收到ContentResolver發出的請求後,内容提供者被激活。而其它三種元件activity、服務和廣播接收器被一種叫做intent的異步消息所激活。

(3)4大元件的關閉

内容提供者僅在響應ContentResolver提出請求的時候激活。而一個廣播接收器僅在響應廣播資訊的時候激活。是以,沒有必要去顯式的關閉這些元件。Activity關閉:可以通過調用它的finish()方法來關閉一個activity。服務關閉:對于通過startService()方法啟動的服務要調用Context.stopService()方法關閉服務,使用bindService()方法啟動的服務要調用Contex.unbindService()方法關閉服務。

(4)android中的任務(activity棧)

(a)任務其實就是activity的棧,它由一個或多個Activity組成,共同完成一個完整的使用者體驗。棧底的是啟動整個任務的Activity,棧頂的是目前運作的使用者可以互動的Activity,當一個activity啟動另外一個的時候,新的activity就被壓入棧,并成為目前運作的activity。而前一個activity仍保持在棧之中。當使用者按下BACK鍵的時候,目前activity出棧,而前一個恢複為目前運作的activity。棧中儲存的其實是對象,棧中的Activity永遠不會重排,隻會壓入或彈出。

(b)任務中的所有activity是作為一個整體進行移動的。整個的任務(即activity棧)可以移到前台,或退至背景。

(c)Android系統是一個多任務(Multi-Task)的作業系統,可以在用手機聽音樂的同時,也執行其他多個程式。每多執行一個應用程式,就會多耗費一些系統記憶體,當同時執行的程式過多,或是關閉的程式沒有正确釋放掉記憶體,系統就會覺得越來越慢,甚至不穩定。為了解決這個問題,Android引入了一個新的機制,即生命周期(Life Cycle)。

轉載自:http://blog.csdn.net/ican87/article/details/21874321#comments