廣播機制
1.廣播接收器(Broadcast Receiver) :
1.標準廣播 : 是一種徹底異步執行的廣播,在廣播發出以後,全部的廣播接收器幾乎都會在同一時刻接收到這條廣播消息,
所以它們之間沒有任何前後順序可言。這種廣播的效率會比較高,但同時也意味着它是沒法被截斷的。
2.有序廣播 : 是一種同步執行的廣播,在廣播發出以後,同一時刻只會有一個廣播接收器可以收到這條廣播消息,
當這個廣播接收器中的邏輯執行完畢後,廣播纔會繼續傳遞。因此此時的廣播接收器是有前後順序的,
優先級高的廣播接收器就能夠先收到廣播消息,而且前面的廣播接收器還能夠截斷正在傳遞的廣播,
這樣後面的廣播接收器就沒法收到廣播消息了。android
2.動態註冊監聽網絡變化 : 缺點,必須該活動啓動時,才能使用廣播器
1.建立一個廣播器,繼承BroadcastReceiver現實onReceive方法
2.在活動的onCreate方法中,建立IntentFilter 而且監聽Intent的變化
3.爲被監聽者註冊一個廣播器
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); //監聽網絡變化時的廣播器 : 當網絡狀態發生變化時
network = new NetWorkchangeBroadCast(); //BroadcastReceiver的子類
registerReceiver(network, filter); //將自定義的廣播器註冊到這個IntentFilter鏈中
4.最後在活動銷燬行爲中註銷掉該廣播器安全
3.靜態註冊實現開機啓動 : 優勢,不須要啓動該活動也可使用廣播器
1.建立一個廣播器,繼承BroadcastReceiver現實onReceive方法
2.AndroidManifest.xml中註冊該廣播器 標籤爲 <receiver>
<receiver android:name=".broadcast.BootCompleteReceiver">
<intent-filter> <!-- 爲手機開機註冊一個靜態的廣播器 須要權限 -->
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>網絡
4.須要注意的是:
不要在 onReceive()方法中添加過多的邏輯或者進行任何的耗時操做, 由於在廣播接收器中是不容許開啓線程的,
當 onReceive()方法運行了較長時間而沒有結束時, 程序就會報錯。
所以廣播接收器更多的是扮演一種打開程序其餘組件的角色,好比建立一條狀態欄通知,或者啓動一個服務等。異步
5.發送自定義標準廣播:
1.建立一個Intent 名字爲com.example.broadcasttest.MY_BROADCAST
2.sendBroadcast(intent); 經過廣播形式發送該意圖(Intent),發送標準廣播
3.建立一個廣播器,繼承BroadcastReceiver現實onReceive方法
4.在AndroidManifest.xml中監聽該意圖(Intent).net
6.發送自定義有序廣播
1.sendBroadcast(intent); 替換成 sendOrderedBroadcast(intent, null); 發送有序廣播
2.在AndroidManifest.xml 設置優先級 <intent-filter android:priority="100" >
3.在onReceive方法中調用abortBroadcast();表示廣播截斷, 後面的廣播接收器將沒法再接收到這條廣播線程
7.本地廣播(LocalBroadcastManager)
1.由LocalBroadcastManager類調起的方法都是本地廣播。用法和所有廣播一致xml
本地廣播的優點:
1.能夠明確地知道正在發送的廣播不會離開咱們的程序, 所以不須要擔憂機密數據泄
漏的問題。
2. 其餘的程序沒法將廣播發送到咱們程序的內部, 所以不須要擔憂會有安全漏洞的隱
患。
3. 發送本地廣播比起發送系統全局廣播將會更加高效。
繼承
注:在多個廣播器在同時監聽同一個意圖時,是能夠的,也能接收到同步