这里省略了很多代码前面的工莋主要是将动态注册的广播接收者和静态注册的广播接收者按照优先级高低存储在不同的列表中,再将这两个列表合并到receivers列表中这样receivers列表包含了所有的广播接收者(无序广播和有序广播)。在注释1处创建BroadcastRecord对象并将receivers传进去在注释2处调用BroadcastQueue的scheduleBroadcastsLocked方法。
这里先给出ContextImpl到AMS的调用过程的時序图
在注释1处将广播的intent等信息封装为Args对象,并在注释2处调用mActivityThread的post方法并传入了Args对象这个mActivityThread是一个Handler对象,具体指向的就是H紸释2处的代码就是将Args对象通过H发送到主线程的消息队列中。Args继承自Runnable这个消息最终会在Args的run方法执行,Args的run方法如下所示
在注释1处执行了广播接收者的onReceive方法,这样注册的广播接收者就收到了广播并得到了intent
广播的注册、发送和接收过程就讲到这,最后给出剩余部分的调用时序圖
欢迎关注我的微信公众号,第一时间获得博客更新提醒以及更多成体系的Android相关原创技术干货。
扫一扫下方二维码或者长按识别二维碼即可关注。