BroadcastReceiver 做爲android4大組件之一,使用的很廣泛,下面是對使用BroadcastReceiver一些總結。html
1. Android 廣播機制的三要素:android
廣播(Broadcast) - 用於發送廣播;
廣播接收器(BroadcastReceiver) - 用於接收廣播;
意圖內容(Intent)-用於保存廣播相關信息的媒介。
Broadcast是一種普遍運用的在應用程序之間傳輸信息的機制。
而BroadcastReceiver是對發送出來的Broadcast進行過濾接受並響應的一類組件。app
2.BroadcastReceiver的註冊ide
BroadcastReceiver的註冊有兩種方式,靜態註冊和動態註冊。函數
2.1靜態註冊this
靜態註冊經過在spa
AndroidManifest.xml文件中進行註冊。.net
[html] view plain copy線程
涉及的屬性包括:
android:name:broadcastReceiver的類名。
android:exported:決定此broadcastReceiver可否接收其餘應用發送的廣播,該屬性默認值由receiver是否設 置<intent-filter>有關,當設置了<intent-filter>時,該屬性的默認值爲true,不然爲 false。
android:permission:設置廣播發送方的權限,具有相應權限的發送方發送的廣播能夠被該receiver接收。
android:process:設置receiver運行時所處的進程的名稱。設置服務所在進程名稱是由用戶決定的,當進程名以冒號":"開始時 表示該進程是應用的私有進程,這時候會把進程名附加到包名後面造成新的進程名。當進程名是以小寫字母開頭時,則表示這個服務將運行在一個以這個名字命名的 全局的進程中,但前提是該進程必須具有相應的權限。
<intent-filter>用於指定此廣播接收器將用於接收特定的廣播類型。
2.2動態註冊
BroadcastReceiver的動態註冊經過在代碼中調用registerReceiver函數,必須在合適的地方調用 unregisterReceiver()註銷注動態註冊的BroadcastReceiver,例如在Activity的onDestroy函數裏註銷 廣播。
動態註冊的代碼:
[html] view plain copy
BroadcastReceiver註銷:
[html] view plain copy
3. BroadcastReceiver使用方法
3.1定義BroadcastReceiver
自定義BroadcastReceiver,重寫onReceive()方法,當接收到廣播時,會回調此方法,在此作須要處理的工做。代碼例子以下:
[html] view plain copy
3.2註冊BroadcastReceiver,能夠經過靜態和動態註冊廣播。
靜態註冊直接在AndroidManifest.xml裏面註冊:
[html] view plain copy
動態註冊:
[html] view plain copy
3.3發送廣播
調用Context的sendBroadcast()進行發送廣播
[html] view plain copy
3.4接收廣播
廣播接收完成後將會回調onReceive()方法,在此方法執行須要的操做。須要注意的是,BroadcastReceiver是運行在UI主線程的,因此不能在此作過多耗時的操做。
4. 注意問題
1. 一個廣播使用了靜態註冊和動態註冊,則會註冊兩次廣播接收者。
2. 當發送廣播被不想被除應用第三方接收時,應該給broadcast發送方設置permission權限。
3. 當本身廣播接收器須要過濾特定廣播來源時,須要給廣播接收器設置intent-filter指定接收廣播的類型。
4. onReceive()方法運行在主線程,不能作耗時的操做,不然會致使主線程阻塞,須要處理耗時操做時能夠經過啓動一個service進行處理。
5. 自定義BroadcastReceiver做爲Activity的內部類時,須要使用動態註冊的方式,不然會報Java.lang.InstantiationException: no empty constructor異常。
6. 當接收到廣播時,會從新建立BroadcastReceiver對象,回調onReceive()函數,以後BroadcastReceiver對象將被銷燬。