Android之四大元件

DooneZhang發表於2021-01-03

應用程式元件是一個Android應用程式的基本構建塊。這些元件由應用清單檔案鬆耦合的組織。AndroidManifest.xml描述了應用程式的每個元件,以及他們如何互動。

Android中稱為四大元件的為別為:Activity、Service、BroadCast Recevicer、Content  provider




Activity:activity是使用者和應用程式互動的視窗,一個activity相當於我們實際中的一個網頁,當開啟一個螢幕時,之前的那一個螢幕會被置為暫停狀態,並且壓入歷史堆疊中,使用者可以通過回退操作返回到以前開啟過的螢幕。activity的生命週期:即“產生、執行、銷燬”,但是這其中會呼叫許多方法onCreate(建立) 、onStart(啟用) 、onResume(恢復) 、onPause(暫停) 、onStop(停止) 、onDestroy(銷燬) 、onRestart(重啟)。

Service:Service是一種程式,它可以執行很長的時間,相當於後臺的一個服務,通過startService(Intent service)可以啟動一個Service,通過Context.bindService()可以繫結一個Service。

BroadCast Recevicer:接受一種或者多種Intent作觸發事件,接受相關訊息,做一些簡單處理,轉換成一條Notification,統一了Android的事件廣播模型。可以使用BroadcastReceiver來讓應用對外一個外部的事件作出響應。Broadcast Receiver通過NotificationManager來通知使用者這些事情發生了,BroadcastReceiver註冊的有兩種方式,一種是可以在AndroidManifest.xml中註冊,另一種可以在執行時的程式碼中使用Context.registerReceiver()進行註冊。使用者還可以通過Context.sendBroadcast()將他們自己的intent broadcasts廣播給其他的應用程式。

Content provider:內容提供者,可通過它來共享自己的資料給外部呼叫,給第三方應用提供資料訪問的介面。









 

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,使用標籤。

(4)Service通常位於後臺執行,它一般不需要與使用者互動,因此Service元件沒有圖形使用者介面。Service元件需要繼承Service基類。Service元件通常用於為其他元件提供後臺服務或監控其他元件的執行狀態。
 

3、content provider(共享,ContentResoloever,URI)

(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訂閱的廣播在觸發時也會對它起作用。

 

1)4大元件的註冊

4大基本元件都需要註冊才能使用,每個Activity、service、Content Provider都需要在AndroidManifest檔案中進行配置。

2)4大元件的啟用

內容提供者的啟用:當接收到ContentResolver發出的請求後,內容提供者被啟用。而其它三種元件activity、服務和廣播接收器被一種叫做intent的非同步訊息所啟用

3)4大元件的關閉

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

 

相關文章