安卓開發之廣播接收器BroadcastReceiver
一、廣播Broadcast
廣播事件處理屬於系統級的,可跨應用的事件處理。
一個應用可以註冊對應的廣播接收器BroadcastReceiver接收一個/多個廣播,也可以傳送廣播Broadcast。
廣播事件機制是應用程式(程式)間通訊的一種手段。
在onReceive中進行耗時操作需要開啟分執行緒來處理,不要在onReceive中直接做耗時處理。
二、相關API
Context
- sendBroadcast(Intent intent);:傳送一般廣播
- sendOrderedBroadcast(Intent intent);:傳送有序廣播
- registerReceiver(receiver,intentFilter);:動態註冊廣播接收器
- unRegisterReceiver(receiver);:解除廣播接收器
BroadcastReceiver
onReceive(Context context , Intent intent):接收到廣播時的回撥。
//可以從Intent中獲取廣播所帶的資料abortBroadcast():中斷廣播的繼續傳播
- boolean isOrderedBroadcast():判斷是否為有序廣播
常見的系統廣播:http://blog.sina.com.cn/s/blog_7dbac1250101mt5h.html
(接收某些廣播時,需要一定的許可權)
(攔截某些廣播時,需要較高的優先順序priority來優先接收到廣播)
三、廣播接收器的兩種註冊方式
廣播接收器的兩種註冊方式:靜態註冊和動態註冊。不管註冊方式如何,都要寫一個廣播接收器的子類,並在onReceive中進行接收到相關廣播後的事務處理 。
在IntentFilter的action中說明監聽的廣播行為。
public class MyReceiver extends BroadcastReceiver{ public MyReceiver(){ Log.e("TAG","MyReceive"); } @Override public void onReceive(Context context,Intent intent){ Log.e("TAG","onReceive"); } }
靜態註冊:在應用的AnroidManiFest中註冊。
<receiver android:name="廣播接收器子類的全類名"> <intent-filter android:priority="設定廣播接收器的優先順序(int值)"> <action android:name="所要接聽的廣播的action"/> <intent-filter> </receiver>
動態註冊:使用Java在程式碼中進行註冊。
//動態註冊: MyReceiver myReceiver = new MyReceiver(); //建立過濾器 IntentFilter filter = new IntentFilter("所要接聽的廣播的action"); //註冊廣播 registerReceiver(myReceiver,filter) //解除廣播接收器,一般在onDestory中呼叫 this.unregisterReceiver(myReceiver); //動態註冊的廣播接收器只能為建立它的Activity/Service工作。 //當動態註冊的廣播接收器的宿主Activity/Service銷燬時,要解除該廣播接收器。否則會報錯。
動態註冊 本地廣播接收器(只在應用內傳播的廣播):LocalBroadcastManager
LocalBroadcastManager mLocalBroadcastManager; MyReceiver myReceiver; mLocalBroadcastManager = LocalBroadcastManager.getInstance(this); myReceiver = new MyReceiver(); //建立過濾器 IntentFilter filter = new IntentFilter("所要接聽的廣播的action"); //註冊廣播接收器 mLocalBroadcastManager.registerReceiver(mReceiver, filter); //解除廣播接收器,一般在onDestory中呼叫 mLocalBroadcastManager.unregisterReceiver(mReceiver);
動態註冊和靜態註冊的區別:
靜態註冊:
註冊方法:配置檔案
註冊時間:應用安裝成功/手機開機載入應用完成。註冊時不會建立廣播接收器物件,接收到廣播時才建立。物件執行完onReceive後等待垃圾回收。收到廣播後在建立新的物件。
生命結束的時間:應用解除安裝/物件等待垃圾回收,建立新的物件。
應用場景:需要監聽整個應用的整個生命過程/其他應用
動態註冊:
註冊方式:Java程式碼
註冊的時間:執行registerReceiver(receiver,filter)後,註冊時就建立廣播接收器物件。 接收廣播時不會再建立物件。
生命結束的時間:執行unRegisterReceiver(receiver)。(註冊廣播接收器的宿主銷燬後必須解除註冊,解除註冊後,物件等待被回收)
應用場景:只服務於某個Activity/Service
四、一般廣播和有序廣播
sendBroadcast(Intent intent);:傳送一般廣播
sendOrderedBroadcast(Intent intent);:傳送有序廣播
boolean isOrderedBroadcast():判斷是否為有序廣播(一般廣播不可以中斷)
區別兩種廣播:
可以在靜態註冊/動態註冊中指定優先順序priority,在廣播接收器中呼叫abortBroadcast()來中斷廣播的繼續傳播。(priority最大值為2^31-1)
相關文章
- 廣播接收器——接收系統廣播
- Android BroadcastReceiver(廣播)AndroidAST
- Android - BroadcastReceiver 廣播AndroidAST
- 安卓應用安全指南4.2.3建立/使用廣播接收器高階話題安卓
- 使用廣播-BroadcastReceiver最詳細解析AST
- 用廣播 BroadcastReceiver 更新 UI 介面真的好嗎?全方位解析廣播ASTUI
- Android-Broadcast Receiver(廣播接收器)AndroidAST
- 不同的activity使用bundle物件傳值給廣播接收器物件
- Spark開發-廣播變數Spark變數
- NumPy之:理解廣播
- Android開機廣播和關機廣播Android
- Android之Broadcast(廣播)AndroidAST
- Android之粘性廣播理解Android
- 14天學會安卓開發(第九天)ContentProvider與BroadcastReceiver安卓IDEAST
- 安卓開發之服務Service安卓
- 安卓開發之 App Widget安卓APP
- 廣播模式模式
- C#廣播訊息收發C#
- 【安卓筆記】作為內部類的廣播接收者安卓筆記
- Android廣播之靜態註冊Android
- 安卓開發之呼叫攝像頭安卓
- 安卓旅途之——開發數獨(一)安卓
- 安卓旅途之——開發數獨(二)安卓
- Android之BroadcastReceiverAndroidAST
- 安卓之viewPager簡單用法圖片輪播安卓Viewpager
- 單播、多播(組播)和廣播的區別
- 組播和廣播的區別
- 安卓開發之Volley的基本使用安卓
- 安卓開發之資料儲存方式安卓
- 安卓旅途之——開發數獨(總結)安卓
- 安卓微信小程式開發之“藍芽”安卓微信小程式藍芽
- 廣播丟資料
- 廣播基礎使用
- IP多路廣播 (轉)
- 安卓開發之網路請求HttpURLConnection安卓HTTP
- 安卓開發之Fragment的使用與通訊安卓Fragment
- Android開機和關機廣播監聽Android
- Laravel Redis 廣播 例項LaravelRedis