--摘自《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發送廣播到客戶端,都是跨進程通信的過程
廣播的種類分為無序廣播、有序廣播和粘性廣播。有序廣播可以指定優先級。
粘性廣播比如電量提醒,發出后,還能一直存在,未來的注冊者也能收到這個廣播。