Android中四大組件總結

android四大組件分別爲activity、service、content provider、broadcast receiver。android

1、android四大組件詳解網絡

一、activityapp

(1)一個Activity一般就是一個單獨的屏幕(窗口)。異步

(2)Activity之間經過Intent進行通訊。ide

(3)android應用中每個Activity都必需要在AndroidManifest.xml配置文件中聲明,不然系統將不識別也不執行該Activity。操作系統

二、service.net

(1)service用於在後臺完成用戶指定的操做。service分爲兩種:xml

(a)started(啓動):當應用程序組件(如activity)調用startService()方法啓動服務時,服務處於started狀態。對象

(b)bound(綁定):當應用程序組件調用bindService()方法綁定到服務時,服務處於bound狀態。blog

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

(a)started service(啓動服務)是由其餘組件調用startService()方法啓動的,這致使服務的onStartCommand()方法被調用。當服務是started狀態時,其生命週期與啓動它的組件無關,而且能夠在後臺無限期運行,即便啓動服務的組件已經被銷燬。所以,服務須要在完成任務後調用stopSelf()方法中止,或者由其餘組件調用stopService()方法中止。

(b)使用bindService()方法啓用服務,調用者與服務綁定在了一塊兒,調用者一旦退出,服務也就終止,大有「不求同時生,必須同時死」的特色。

(3)開發人員須要在應用程序配置文件中聲明所有的service,使用<service></service>標籤。

(4)Service一般位於後臺運行,它通常不須要與用戶交互,所以Service組件沒有圖形用戶界面。Service組件須要繼承Service基類。Service組件一般用於爲其餘組件提供後臺服務或監控其餘組件的運行狀態。

三、content provider

(1)android平臺提供了Content Provider使一個應用程序的指定數據集提供給其餘應用程序。其餘應用能夠經過ContentResolver類從該內容提供者中獲取或存入數據。

(2)只有須要在多個應用程序間共享數據是才須要內容提供者。例如,通信錄數據被多個應用程序使用,且必須存儲在一個內容提供者中。它的好處是統一數據訪問方式。

(3)ContentProvider實現數據共享。ContentProvider用於保存和獲取數據,並使其對全部應用程序可見。這是不一樣應用程序間共享數據的惟一方式,由於android沒有提供全部應用共同訪問的公共存儲區。

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

(5)ContentProvider使用URI來惟一標識其數據集,這裏的URI以content://做爲前綴,表示該數據由ContentProvider來管理。

四、broadcast receiver

(1)你的應用可使用它對外部事件進行過濾,只對感興趣的外部事件(如當電話呼入時,或者數據網絡可用時)進行接收並作出響應。廣播接收器沒有用戶界面。然而,它們能夠啓動一個activity或serice來響應它們收到的信息,或者用NotificationManager來通知用戶。通知能夠用不少種方式來吸引用戶的注意力,例如閃動背燈、震動、播放聲音等。通常來講是在狀態欄上放一個持久的圖標,用戶能夠打開它並獲取消息。

(2)廣播接收者的註冊有兩種方法,分別是程序動態註冊和AndroidManifest文件中進行靜態註冊。

(3)動態註冊廣播接收器特色是當用來註冊的Activity關掉後,廣播也就失效了。靜態註冊無需擔心廣播接收器是否被關閉,只要設備是開啓狀態,廣播接收器也是打開着的。也就是說哪怕app自己未啓動,該app訂閱的廣播在觸發時也會對它起做用。

2、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

相關文章
相關標籤/搜索