BroadCastReceiver:
1)廣播接收者是一個專注于接收廣播通知信息,并做出對應處理的組件。很多廣播是源自于系統──比如,通知時區改變、電池電量低、拍攝了一張照片或者用戶改變了語言選項。應用程序也可以進行廣播──比如說,通知其它應用程序一些數據下載完成并處于可用狀態。
2)應用程序可以擁有任意數量的廣播接收者以對所有它感興趣的通知信息予以響應。所有的接收器均繼承自BroadcastReceiver基類。
3)廣播接收者沒有用戶界面。然而,它們可以啟動一個activity來響應它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等等。一般來說是在狀態欄上放一個持久的圖標,用戶可以打開它并獲取消息。
廣播分幾種?他們有什么區別?
? ? ? 廣播被分為兩種不同的類型:“普通廣播(Normal broadcasts)”和“有序廣播(Ordered broadcasts)”。普通廣播是完全異步的,可以在同一時刻(邏輯上)被所有接收者接收到,消息傳遞的效率比較高,但缺點是:接收者不能將處理結果傳遞給下一個接收者,并且無法終止廣播Intent的傳播。
? ? ? 然而有序廣播是按照接收者聲明的優先級別,被接收者依次接收廣播。如:A的級別高于B,B的級別高于C,那么,廣播先傳給A,再傳給B,最后傳給C 。優先級別聲明在 intent-filter 元素的 android:priority 屬性中,數越大優先級別越高,取值范圍:-1000到1000,優先級別也可以調用IntentFilter對象的setPriority()進行設置 。有序廣播的接收者可以終止廣播Intent的傳播,廣播Intent的傳播一旦終止,后面的接收者就無法接收到廣播。
? ? 另外,有序廣播的接收者可以將數據傳遞給下一個接收者,如:A得到廣播后,可以往它的結果對象中存入數據,當廣播傳給B時,B可以從A的結果對象中得到A存入的數據。
?? Context.sendBroadcast()? ?發送的是普通廣播,所有訂閱者都有機會獲得并進行處理。
?? Context.sendOrderedBroadcast()? ?發送的是有序廣播,系統會根據接收者聲明的優先級別按順序逐個執行接收者,前面的接收者有權終止廣播(BroadcastReceiver.abortBroadcast()), 如果廣播被前面的接收者終止,后面的接收者就再也無法獲取到廣播。對于有序廣播,前面的接收者可以將數據通過setResultExtras(Bundle)方法存放進結果對象,然后傳給下一個接收者,下一個接收者通過代碼:Bundle bundle = getResultExtras(true))可以獲取上一個接收者存入在結果對象中的數據
本地廣播和全局廣播的差別
BroadcastReceiver是針對應用間、應用與系統間、應用內部進行通信的一種方式
LocalBroadcastReceiver僅在自己的應用內發送接收廣播,也就是只有自己的應用能收到,數據更加安全廣播只在這個程序里,而且效率更高。
BroadcastReceiver 使用
1.制作intent(可以攜帶參數)
2.使用sendBroadcast()傳入intent;
3.制作廣播接收器類繼承BroadcastReceiver重寫onReceive方法(或者可以匿名內部類啥的)
4.在java中(動態注冊)或者直接在Manifest中注冊廣播接收器(靜態注冊)使用registerReceiver()傳入接收器和intentFilter
5.取消注冊可以在OnDestroy()函數中,unregisterReceiver()傳入接收器
LocalBroadcastReceiver 使用
LocalBroadcastReceiver不能靜態注冊,只能采用動態注冊的方式。
在發送和注冊的時候采用,LocalBroadcastManager的sendBroadcast方法和registerReceiver方法