Android-Broadcast廣播機制

一、廣播類型

標準廣播:

是一種完全異步執行的廣播,在廣播發出后,所有廣播接收器幾乎在同一時間接收到這條廣播消息。他們之間沒有任何先后順序。這種廣播小綠本比較高,但它無法被截斷。

有序廣播:

是一種同步執行的廣播,在廣播發出后,同一時刻只會有一個廣播接收器能夠接收到這條廣播消息,當這個廣播接收器中的邏輯執行完成之后,廣播才會繼續傳遞消息。這種廣播有先后順序,優先級高的廣播接收器先接收到廣播消息,并且前面的廣播接收器還可以截斷正在傳遞的廣播。

二、接受系統廣播

接收廣播需要用到廣播接收器。廣播接收器可以自由的對自己感興趣的廣播進行注冊,當對應的廣播發出時,廣播接收器就能后接受到該廣播,并在內部處理相應的邏輯。廣播接收器分兩種注冊方式:在代碼中注冊為動態注冊;在AndroidManifest中注冊是靜態注冊。

動態注冊的demo:


MyBroadcastReceiver繼承于BroadcastReceiver,重寫了onReceive()方法,當網絡狀態發生變化時,這個onReceive方法就會被執行。在onCreate方法中創建了一個IntentFilter實例,添加了一個值為android.net.conn.CONNECTIVITY_CHANGE的action。接下來建了一個MyBroadcastReceiver的實例,然后調用registerReceiver注冊這個廣播,把intentFilter和BroadcastReceiver兩個實例都穿進去,這樣MyBroadcastReceiver會接受到所有值為android.net.conn.CONNECTIVITY_CHANGE的廣播 。android.net.conn.CONNECTIVITY_CHANGE這個值是系統用于檢測網絡變化的。另外動態注冊的廣播都要取消注冊,在onDestroy方法中調unregisterReceiver()方法實現。在運行時候會遇到權限問題,因為Android中很多操作都需要聲明權限才能進行。需要在AndroidManifest中聲明這個權限:<uses-permission android:name="andorid.permission.ACCESS_NETWORK_STATE"/>用手機去測試就可以,每次發生網絡變化時,就會彈出一個toast。

靜態廣播:


利用Android Studio直接new一個broadcast,AndroidManifest中會自動生成Receiver對應的結構。然后在Receiver結構中添加廣播的接收廣播的關鍵字

<intent-fliter>

<action android:name="android.intent.action.BOOT_COMPLETED"/>

</intent-fliter>

就完成了靜態廣播的注冊。mainActivity中的代碼進行細微調整就可以。"BOOT_COMPLETED"這個關鍵字是系統開機啟動完成發出的系統廣播。

自定義廣播:

自定義廣在注冊是的關鍵字是自己隨機定義的,在代碼上的展示就是:

標準廣播:<action android:name="自定義"/>

在onCreat方法中:

Intent intent =new Intent("自定義");

startBroadcast(intent);

有序廣播的區別在發送發送時區別就是startOrderBroadcast(intent);決定廣告接收順序的在廣播注冊時候的屬性條目? android:priority="100"。在一個activity中接收到這個廣播以后不想讓它繼續傳遞的話,只需要在onReceive方法的末尾添加 abortBroadcast();

本地廣播


和普通廣播的區別不大需要額外聲明一個localBroadcastManager來發送廣播。本地廣播只能本地接收。

廣播差不多就這么用,比較簡單

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容