一。廣播的注冊過程(動态注冊)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CNidTY5gjNmJDMwYWY2QWYiZDNidzM0UzMmhTMiBjN48CXxEzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.png)
1)靜态注冊在應用安裝時由PackageManagerService來完成注冊過程
2)IIntentReceiver是一個Binder接口,用于廣播的跨程序的通信,它在LoadedApk.ReceiverDispatcher.InnerReceiver中實作
3)注冊廣播是一個跨程序過程,需要具有跨程序的通信功能的IIntentReceiver
4)粘性廣播是存儲在AMS中的
5)ReceiverList繼承自ArrayList,用來存儲廣播接收者
6)AMS接收到廣播時就可以從mReceiverResolver中找到對應的廣播接收者了,進而達到了注冊廣播的目的
二。廣播的發送和接收過程
第一步。ContextImpl到AMS的調用過程
第二步。AMS到BroadcastReceiver的調用過程
1)IIntentReceiver和IActivityManager一樣,都使用了AIDL來實作程序間通信。InnerReceiver繼承自IIntentReceiver.Stub,是Binder通信的伺服器端,IIntentReceiver則是Binder通信的用戶端、InnerReceiver在本地的代理,它的具體實作就是InnerReceiver