Android四大組件(詳細(xì)總結(jié))

Android四大組件分別為activity、service、content provider、broadcast receiver。

一、android四大組件詳解


1、activity

(1)一個Activity通常就是一個單獨(dú)的屏幕(窗口)。

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

(3)android應(yīng)用中每一個Activity都必須要在AndroidManifest.xml配置文件中聲明,否則系統(tǒng)將不識別也不執(zhí)行該Activity。


2、service

(1)service用于在后臺完成用戶指定的操作。service分為兩種:

(a)started(啟動):當(dāng)應(yīng)用程序組件(如activity)調(diào)用startService()方法啟動服務(wù)時,服務(wù)處于started狀態(tài)。

(b)bound(綁定):當(dāng)應(yīng)用程序組件調(diào)用bindService()方法綁定到服務(wù)時,服務(wù)處于bound狀態(tài)。

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

(a)started service(啟動服務(wù))是由其他組件調(diào)用startService()方法啟動的,這導(dǎo)致服務(wù)的onStartCommand()方法被調(diào)用。當(dāng)服務(wù)是started狀態(tài)時,其生命周期與啟動它的組件無關(guān),并且可以在后臺無限期運(yùn)行,即使啟動服務(wù)的組件已經(jīng)被銷毀。因此,服務(wù)需要在完成任務(wù)后調(diào)用stopSelf()方法停止,或者由其他組件調(diào)用stopService()方法停止。

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

(3)開發(fā)人員需要在應(yīng)用程序配置文件中聲明全部的service,使用<service></service>標(biāo)簽。

(4)Service通常位于后臺運(yùn)行,它一般不需要與用戶交互,因此Service組件沒有圖形用戶界面。Service組件需要繼承Service基類。Service組件通常用于為其他組件提供后臺服務(wù)或監(jiān)控其他組件的運(yùn)行狀態(tài)。

3、content provider


(1)android平臺提供了Content Provider使一個應(yīng)用程序的指定數(shù)據(jù)集提供給其他應(yīng)用程序。其他應(yīng)用可以通過ContentResolver類從該內(nèi)容提供者中獲取或存入數(shù)據(jù)。

(2)只有需要在多個應(yīng)用程序間共享數(shù)據(jù)是才需要內(nèi)容提供者。例如,通訊錄數(shù)據(jù)被多個應(yīng)用程序使用,且必須存儲在一個內(nèi)容提供者中。它的好處是統(tǒng)一數(shù)據(jù)訪問方式。

(3)ContentProvider實(shí)現(xiàn)數(shù)據(jù)共享。ContentProvider用于保存和獲取數(shù)據(jù),并使其對所有應(yīng)用程序可見。這是不同應(yīng)用程序間共享數(shù)據(jù)的唯一方式,因?yàn)閍ndroid沒有提供所有應(yīng)用共同訪問的公共存儲區(qū)。

(4)開發(fā)人員不會直接使用ContentProvider類的對象,大多數(shù)是通過ContentResolver對象實(shí)現(xiàn)對ContentProvider的操作。

(5)ContentProvider使用URI來唯一標(biāo)識其數(shù)據(jù)集,這里的URI以content://作為前綴,表示該數(shù)據(jù)由ContentProvider來管理。

4、broadcast receiver


(1)你的應(yīng)用可以使用它對外部事件進(jìn)行過濾,只對感興趣的外部事件(如當(dāng)電話呼入時,或者數(shù)據(jù)網(wǎng)絡(luò)可用時)進(jìn)行接收并做出響應(yīng)。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或serice來響應(yīng)它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力,例如閃動背燈、震動、播放聲音等。一般來說是在狀態(tài)欄上放一個持久的圖標(biāo),用戶可以打開它并獲取消息。

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

(3)動態(tài)注冊廣播接收器特點(diǎn)是當(dāng)用來注冊的Activity關(guān)掉后,廣播也就失效了。靜態(tài)注冊無需擔(dān)憂廣播接收器是否被關(guān)閉,只要設(shè)備是開啟狀態(tài),廣播接收器也是打開著的。也就是說哪怕app本身未啟動,該app訂閱的廣播在觸發(fā)時也會對它起作用。

二、android四大組件總結(jié):


(1)4大組件的注冊

4大基本組件都需要注冊才能使用,每個Activity、service、Content Provider都需要在AndroidManifest文件中進(jìn)行配置。AndroidManifest文件中未進(jìn)行聲明的activity、服務(wù)以及內(nèi)容提供者將不為系統(tǒng)所見,從而也就不可用。而broadcast receiver廣播接收者的注冊分靜態(tài)注冊(在AndroidManifest文件中進(jìn)行配置)和通過代碼動態(tài)創(chuàng)建并以調(diào)用Context.registerReceiver()的方式注冊至系統(tǒng)。需要注意的是在AndroidManifest文件中進(jìn)行配置的廣播接收者會隨系統(tǒng)的啟動而一直處于活躍狀態(tài),只要接收到感興趣的廣播就會觸發(fā)(即使程序未運(yùn)行)。

(2)4大組件的激活

內(nèi)容提供者的激活:當(dāng)接收到ContentResolver發(fā)出的請求后,內(nèi)容提供者被激活。而其它三種組件activity、服務(wù)和廣播接收器被一種叫做intent的異步消息所激活。

(3)4大組件的關(guān)閉

內(nèi)容提供者僅在響應(yīng)ContentResolver提出請求的時候激活。而一個廣播接收器僅在響應(yīng)廣播信息的時候激活。所以,沒有必要去顯式的關(guān)閉這些組件。Activity關(guān)閉:可以通過調(diào)用它的finish()方法來關(guān)閉一個activity。服務(wù)關(guān)閉:對于通過startService()方法啟動的服務(wù)要調(diào)用Context.stopService()方法關(guān)閉服務(wù),使用bindService()方法啟動的服務(wù)要調(diào)用Contex.unbindService()方法關(guān)閉服務(wù)。

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

(a)任務(wù)其實(shí)就是activity的棧,它由一個或多個Activity組成,共同完成一個完整的用戶體驗(yàn)。棧底的是啟動整個任務(wù)的Activity,棧頂?shù)氖钱?dāng)前運(yùn)行的用戶可以交互的Activity,當(dāng)一個activity啟動另外一個的時候,新的activity就被壓入棧,并成為當(dāng)前運(yùn)行的activity。而前一個activity仍保持在棧之中。當(dāng)用戶按下BACK鍵的時候,當(dāng)前activity出棧,而前一個恢復(fù)為當(dāng)前運(yùn)行的activity。棧中保存的其實(shí)是對象,棧中的Activity永遠(yuǎn)不會重排,只會壓入或彈出。

(b)任務(wù)中的所有activity是作為一個整體進(jìn)行移動的。整個的任務(wù)(即activity棧)可以移到前臺,或退至后臺。

(c)Android系統(tǒng)是一個多任務(wù)(Multi-Task)的操作系統(tǒng),可以在用手機(jī)聽音樂的同時,也執(zhí)行其他多個程序。每多執(zhí)行一個應(yīng)用程序,就會多耗費(fèi)一些系統(tǒng)內(nèi)存,當(dāng)同時執(zhí)行的程序過多,或是關(guān)閉的程序沒有正確釋放掉內(nèi)存,系統(tǒng)就會覺得越來越慢,甚至不穩(wěn)定。為了解決這個問題,Android引入了一個新的機(jī)制,即生命周期(Life Cycle)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容