1.简介
“在安卓的广播机制中,用户自定义的Activity或自定义的子类BroadcastReceiver扮演着接收器的角色,Activity本身以及各类系统事件(如有电话拨入)也可以扮演广播发出者的角色。而其中,Android的Activity Manager Service无疑扮演着核心角色。总体上,安卓的广播采用的是订阅者、发布者的设计模式。”---来自本人第一篇博客《对android广播接收与发出机制的一些AMS以外的源码分析》
第一节,我们在AMS以外的部分,描述了广播接收和发送机制的原理,主要是一些初始化操作,第二节我们在AMS内部观察注册广播接收器机制的原理。
现在我们开始在AMS内部观察发送广播的原理。
2.发送广播
首先我们回顾一下第一节的一些内容。注册者线程的最后一步是向远程binder对象发送信息。具体细节已在上一节阐述过,这里略过。
发送信息的关键语句是ActivityManagerProxy,中的broadcastIntent方法:
public int broadcastIntent(IApplicationThread caller,
Intent intent, String resolvedType, IIntentReceiver resultTo,
int resultCode, String resultData, Bundle map,
String[] requiredPermissions, int appOp, Bundle options, boolean serialized,
boolea