android_Broadcast

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()方法來啓用和禁用它。


發佈了33 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章