[Android面試題-8] BroadCastReceiver的兩種註冊方式的異同

 在Android手機應用程序中開發中,需要用到BroadcastReceiver來監聽廣播的消息。在自定義好BroadcastReceiver ,需要對其進行註冊,註冊有兩種方法,一種是在代碼當中註冊,註冊的方法是registerReceiver(receiver,filter)(用Activity的實例來調用),取消註冊的方法:unregisterReceiver(receiver),如果一個BroadcastReceiver用於更新UI(User Interface),那麼通常會使用這種方法進行註冊,在Activity啟動的時候進行註冊,在Activity不可見後取消註冊;另一種就是在 AndroidManifest當中進行註冊。

 

下面簡單的看一下兩種註冊方式:

第一種:使用代碼進行訂閱

[java]  

IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");  

IncomingSMSReceiver receiver = new IncomingSMSReceiver();  

registerReceiver(receiver, filter);  

 

第二種:在AndroidManifest.xml文件中的<application>節點裡進行訂閱:

[html]  

<receiver android:name=".IncomingSMSReceiver">  

    <intent-filter>  

         <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  

    </intent-filter>  

</receiver>  

 

註冊完之後即可以發送廣播,使用Context.sendBroadcast()、Context.sendOrderedBroadcast()或者Context.sendStickyBroadcast()來實現,接收端代碼:

[java]  

public class IncomingSMSReceiver extends BroadcastReceiver {  

       @Override  

       public void onReceive(Context context, Intent intent) {  

              //todo…接收廣播,做自己的業務   }  

}  

 

以上完成瞭廣播的註冊、發送和接收處理的過程,其中包含瞭註冊廣播的兩種方式,接下來討論一下兩種廣播註冊方式的區別:

        區別:

        在AndroidManifest中進行註冊後,不管改應用程序是否處於活動狀態,都會進行監聽,比如某個程序時監聽 內存 的使用情況的,當在手機上安裝好後,不管改應用程序是處於什麼狀態,都會執行改監聽方法中的內容。

        在代碼中進行註冊後,當應用程序關閉後,就不再進行監聽。我們讀知道,應用程序是否省電,決定瞭該應用程序的受歡迎程度,所以,對於那些沒必要在程序關閉後仍然進行監聽的Receiver,在代碼中進行註冊,無疑是一個明智的選擇。

發佈留言