BroadcastReceiver工作原理


--摘自《android插件化開發指南》

1.動態注冊過程是注冊Receiver並通知AMS,發送內容包括IntentFilter、一個實現了IIntentReceiver接口的Binder對象、activity所在的進程。

2.AMS收到消息后,會把所有Receiver保存在一個列表中

3.靜態Receiver是在App安裝的時候注冊,PMS會解析AndroidManifest中的四大組件信息

4.動態Receiver和靜態Receiver分別存在AMS不同的變量中,發送廣播時,會把兩種Receiver合並到一起,其中動態的排在靜態的前面,所以動態Receiver永遠優先於靜態Receiver收到消息

5.Android系統每次啟動時,都會重新安裝所有的apk

6.音樂類播放器用到Receiver的地方很多,比如前台的activity,點擊按鈕,會給后台service發送一個receiver,后台做相應操作

注冊過程

發送廣播流程

第一步:Service發送廣播給AMS

參數Intent攜帶了filter,告訴AMS什么樣的Receiver可以接收這個廣播

第二步:AMS接收廣播,發送廣播

Receiver分為無序Receiver和有序Receiver,所以廣播發送隊列也分為兩個

第三步:APP處理廣播

AMS將注冊時候的IIntentReceiver接口對象傳回給客戶端

綜上,客戶端注冊Receiver到AMS和AMS發送廣播到客戶端,都是跨進程通信的過程

廣播的種類分為無序廣播、有序廣播和粘性廣播。有序廣播可以指定優先級。

粘性廣播比如電量提醒,發出后,還能一直存在,未來的注冊者也能收到這個廣播。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM