android4.4广播,Android4.4 framework分析——广播的注册(BroadcastReceiver)和发送(sendbroadcast)过程分析...

在Android应用程序框架中,Activity和Service类都继承了ContextWrapper类,因此,我们可以在Activity或者Service的子类中调用registerReceiver函数来注册广播接收器。

下图是在activity中注册广播的过程:

c0b7a4f14881df07dd5032d2571258db.png

step1~step3,就是一般的调用过程。

step4,registerReceiverInternal()方法如下:

private Intent registerReceiverInternal(BroadcastReceiver receiver, int userId,

IntentFilter filter, String broadcastPermission,

Handler scheduler, Context context) {

IIntentReceiver rd = null;

if (receiver != null) {

if (mPackageInfo != null && context != null) {

if (scheduler == null) {

scheduler = mMainThread.getHandler();

}

rd = mPackageInfo.getReceiverDispatcher(

receiver, context, scheduler,

mMainThread.getInstrumentation(), true);

} else {

if (scheduler == null) {

scheduler = mMainThread.getHandler();

}

rd = new LoadedApk.ReceiverDispatcher(

receiver, context, scheduler, null, true).getIIntentReceiver();

}

}

try {

return ActivityManagerNative.getDefault().registerReceiver(

mMainThread.getApplicationThread(), mBasePackageName,

rd, filter, broadcastPermission, userId);

} catch (RemoteException e) {

return null;

}

}

scheduler传下的是null,scheduler = mMainThread.getHandler();将获得H的对象mH,用于后续broadcast的发送。

step6,先从已有的注册列表mReceivers中查找是否由相同的ReceiverDispatcher,若之前没有注册过,则new一个ReceiverDispatcher,并记录在mReceivers中,ReceiverDispatcher创建过程中,同时生成一个InnerReceiver,InnerReceiver用于接收处理sendBroadcast发过来的广播。

step9~step11,通过binder访问ActivityManagerService的registerReceiver,将广播接收器receiver保存起来。

下图是广播发送(sendBroadcast)的过程:

420fd0f45538d43e8557ac6fdfbb7828.png

分析步骤参考:http://blog.csdn.net/luoshengyang/article/details/6744448

右键复制图片地址,在浏览器中打开即可查看大图。

未完待续,有不对的地方,请指正。

原文:http://blog.csdn.net/canghai1129/article/details/41019137

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值