Android 广播的注册 发送 接收 过程均是通过Binder方式与AMS交互来完成的
Android 广播接收器注册过程:
1. 向AMS发送广播注册请求
2. AMS接收到请求后,完成注册
向AMS发送广播注册请求, 通过ContextImpl的registerReceiverInternal()方法实现
registerReceiverInternal的作用:
1. 将需要注册的广播接收器 包装成 InnerReceiver实体
2. 向AMS发送Binder请求,即注册广播请求
注册的过程在AMS中完成:
AMS通过registerReceiver 将 InnerReceiver(IIntentReceiver接口的具体实现类) 和IntentFiler对象(具体的广播)存储起来,广播注册的过程就结束了
Android 广播 发送和接收过程:
1. ContextImpl通过sendBroadcast()方法发送 发送广播的Binder请求到AMS
2. AMS接收到该请求后,将注册了该广播的接收器添加到BroadcastQueue
3. BroadcastQueue通过回调 InnerReceiver的performReceiver方法,完成回调具体的广播接收器的onReceiver方法
由上可知,InnerReceiver 这个Binder接口很重要:
1. 广播注册请求时,需要将InnerReceiver实体传递给AMS;
2. 广播发送后的中转(广播接收) 也是通过直接回调1种的InnerReceiver对象来完成