没有合适的资源?快使用搜索试试~ 我知道了~
广播接受者注册1
资源详情
资源评论
资源推荐
本文依据罗升阳博客,以及 Android 6 进行调试总结而得。
http://blog.csdn.net/luoshengyang/article/details/6730748
说明:四大组件 Activity、Service、Broadcast Receiver、Content Provider。Broadcast Receiver 是广播接收者,
Activity、Service 可以用于发送广播,也就是广播的发送者。
广播的注册中心:AMS
注册方式:静态注册:在 AndroidManifest.xml 中配置,信息是保存在 PMS 中,该接收者科可能没有
动态注册:在代码中注册,所以所在进程一定是启动的
广播接收者的注册过程:
在 APP 中的 Broadcounter 中的 onResume 中:
1. public void onResume() {
2. super.onResume();
3. IntentFilter counterActionFilter = new IntentFilter(CounterService.BROADCAST_COUNTER_ACTION);
4. registerReceiver(counterActionReceiver, counterActionFilter);
5. }
调用 Activity 的父类方法 ContextWrapper 的 registerReceiver:
1. @Override
2. public Intent registerReceiver(
3. BroadcastReceiver receiver, IntentFilter filter,
4. String broadcastPermission, Handler scheduler) {
5. return mBase.registerReceiver(receiver, filter, broadcastPermission,scheduler);
6. }
mBase 其实是定义为 Context,其实是其子类 ContextImpl:
1. @Override
2. public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
3. return registerReceiver(receiver, filter, null, null);
4. }
再调用 ContextImpl 里的 registerReceiver(receiver, filter, null, null):
1. public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter,
2. String broadcastPermission, Handler scheduler) {
3. return registerReceiverInternal(receiver, getUserId(),
4. filter, broadcastPermission, scheduler, getOuterContext());
5. }
在 Android 6 中比老罗用的版本多了一个参数 getUserId(),看下这个参数干什么了:
1. /** {@hide} */
2. @Override
3. public int getUserId() {
4. return mUser.getIdentifier();
5. }
这里的 mUser 是 UserHandle 类(这个类据说是在 4.2.2 以后加入多用户使用的):
1. private final UserHandle mUser;
继续看 UserHandle 类的方法 getIdentifier():
1. /**
2. * Returns the userId stored in this UserHandle.
林书尼
- 粉丝: 21
- 资源: 315
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0