Android(安卓)的 广播注册(一)
1、在Android的广播机制中,ActivityManagerService扮演着广播中心的角色,负责系统中所有广播的注册和发布操作,因此,Android应用程序注册广播接收器的过程就把是广播接收器注册到ActivityManagerService的过程。Android应用程序是通过调用ContextWrapper类的registerReceiver函数来把广播接收器BroadcastReceiver注册到ActivityManagerService中去的,而ContextWrapper类本身又借助ContextImpl类来注册广播接收器。
注册流程先看我一般是这样注册的:
注册2、先调用ContextWrapper 的registerReceiver------>ContextImpl 的 registerReceiver
3、registerReceiver--->registerReceiverInternal中:
第一步:mPackageInfo.getReceiverDispatcher函数获得一个IIntentReceiver接口对象rd,这是一个Binder对象。
在LoadedApk.getReceiverDispatcher 中:
在新建广播接收发布器ReceiverDispatcher时,会在构造函数里面创建一个InnerReceiver实例,这是一个Binder对象,实现了IIntentReceiver接口,可以通过ReceiverDispatcher.getIIntentReceiver函数来获得,获得后就会把它传给ActivityManagerService,以便接收广播。在ReceiverDispatcher类的构造函数中,还会把传进来的Handle类型的参数activityThread保存下来,以便后面在分发广播的时候使用。
第二步:这个函数通过Binder驱动程序就进入到ActivityManagerService中的registerReceiver函数中去了
在ActivityManagerService中,用一个进程记录块来表示这个应用程序进程,它里面有一个列表receivers,专门用来保存这个进程注册的广播接收器。接着,又把这个ReceiverList列表以receiver为Key值保存在ActivityManagerService的成员变量mRegisteredReceivers中,这些都是为了方便在收到广播时,快速找到对应的广播接收器的。
上面只是把广播接收器receiver保存起来了,但是还没有把它和filter关联起来,这里就创建一个BroadcastFilter来把广播接收器列表rl和filter关联起来,然后保存在ActivityManagerService中的成员变量mReceiverResolver中去。
这样,广播接收器注册的过程就介绍完了,比较简单,但是工作又比较琐碎,主要就是将广播接收器receiver及其要接收的广播类型filter保存在ActivityManagerService中,以便以后能够接收到相应的广播并进行处理
更多相关文章
- 安卓手机助手Jihosoft Android(安卓)Manager英文安装及注册教程(
- android 4.x receiver、services无法启动
- Android零碎知识
- Android调试笔记——FATAL EXCEPTION: main...have you declared
- 作业三——观察者模式在Android广播机制上的应用
- Android(安卓)的权限级别小记
- Android(安卓)ContentProvider的使用和理解
- Android开发面试经——2.常见Android基础笔试题
- Android监听手机网络变化