Broadcast機制
android系統的廣播機制,它們的實現機理都是消息發佈/訂閱模式的事件驅動模型,消息的生產者發佈事件,而使用者
訂閱感興趣的事件。
Broadcast註冊
1.第一種不是常駐型廣播,也就是說廣播跟隨activity的生命週期。注意: 在activity結束前,移除廣播接收器。
(動態註冊)
//生成廣播處理
smsBroadCastReceiver = new SmsBroadCastReceiver();
//實例化過濾器並設置要過濾的廣播
IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
//註冊廣播
BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter);
2.第二種是常駐型,也就是說當應用程序關閉後,如果有信息廣播來,程序也會被系統調用自動運行。(靜態註冊
<receiver android:name=".SmsBroadCastReceiver">
<intent-filter android:priority="20">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
Broadcast流程
1,廣播的接收者把廣播接收器註冊到ActivityManagerService中;
2,廣播的發送者同樣是把廣播發送到ActivityManagerService中,由ActivityManagerService去查找註冊了這個廣播的接收者,然後把廣播分發給它們。
3. 廣播分發的過程,其實就是把這個廣播轉換成一個消息,然後放入到接收器所在的線程消息隊列中去,最後就可以在消息循環中調用接收器的onReceive函數了。ActivityManagerService把這個廣播放進接收器所在的線程消息隊列後,就返回了,它不關心這個消息什麼時候會被處理,因此,對廣播的處理是異步的,即調用sendBroadcast時,這個函數不會等待這個廣播被處理完後才返回。
注:
動態註冊要比靜態註冊輕量,在清單中聲明瞭<receiver>可以使用setComponentEnabledSetting()方法來啓用和禁用它。