android开发-BroadcastReceiver的底层原理
来源:互联网 发布:免费源码加密 编辑:程序博客网 时间:2024/06/07 04:42
Receiver的原理
一、注册的过程
通过ContextWrapper的registerReceiver,但是实际上工作的是ContextImpllai 来完成的
真正做注册的是通过registerReceiverInternal方法在这个方法里。
注册的过程也是一个进程间通信的过程。把BroadcastReceiver封装成IIntentReceiver,BroadCastReceiver作为Android的一个组件是不能直接跨进程传递的,IIntentReceiver是一个Binder的接口,通过IIntentReceiver中转一下。
IIntentReceiver的实现类是ReceiverDispatch的InnerReceiver
ActivityManagerNative.getDefault()内部其实是ServiceManager提供的IBinder,他就是ActivityManagerService的引用
通过ActivityManagerService的registerReceiver方法就把 远程的IIntentReceiver和IntentFilter注册到服务中了。
二、广播的发送
通过ContextImpl的sendBrocast的方法实现的
通过ActivityManagerNative.getDefault().broadcastIntent();
ContextImpl什么也没干 直接向ActivityManagerService发送了一个异步请求。
broadcastIntent里面 调用了broadcastIntentLocked,这里的Intent.addFlag(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES)
这是发送给除了已经被停止的应用的app,这是在android3.1开始有的特性,在android5.0中默认的Intent.FLAG_EXCLUDE_STOPPED_PACKAGES,如果想启动已经被停止的app,设置flag:Intent.FLAG_INCLUDE_STOPPED_PACKAGES 这个flag是启动包括已经停止的广播
broadcastIntentLocked,会根据intent_filter匹配广播的接受者 然后放入一个BroadcastQueue中,这样广播就发送给相应的接受者
内部调用了app.thread.scheduleRegisterReceiver,这就是ActivityThread里面的方法,通过一个handler发送一个消息 然后调用
BroadcastReceiver里面的onReceiver
一、注册的过程
通过ContextWrapper的registerReceiver,但是实际上工作的是ContextImpllai 来完成的
真正做注册的是通过registerReceiverInternal方法在这个方法里。
注册的过程也是一个进程间通信的过程。把BroadcastReceiver封装成IIntentReceiver,BroadCastReceiver作为Android的一个组件是不能直接跨进程传递的,IIntentReceiver是一个Binder的接口,通过IIntentReceiver中转一下。
IIntentReceiver的实现类是ReceiverDispatch的InnerReceiver
ActivityManagerNative.getDefault()内部其实是ServiceManager提供的IBinder,他就是ActivityManagerService的引用
通过ActivityManagerService的registerReceiver方法就把 远程的IIntentReceiver和IntentFilter注册到服务中了。
二、广播的发送
通过ContextImpl的sendBrocast的方法实现的
通过ActivityManagerNative.getDefault().broadcastIntent();
ContextImpl什么也没干 直接向ActivityManagerService发送了一个异步请求。
broadcastIntent里面 调用了broadcastIntentLocked,这里的Intent.addFlag(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES)
这是发送给除了已经被停止的应用的app,这是在android3.1开始有的特性,在android5.0中默认的Intent.FLAG_EXCLUDE_STOPPED_PACKAGES,如果想启动已经被停止的app,设置flag:Intent.FLAG_INCLUDE_STOPPED_PACKAGES 这个flag是启动包括已经停止的广播
broadcastIntentLocked,会根据intent_filter匹配广播的接受者 然后放入一个BroadcastQueue中,这样广播就发送给相应的接受者
内部调用了app.thread.scheduleRegisterReceiver,这就是ActivityThread里面的方法,通过一个handler发送一个消息 然后调用
BroadcastReceiver里面的onReceiver
阅读全文
0 0
- android开发-BroadcastReceiver的底层原理
- android开发-BroadcastReceiver的种类
- Android的Window底层原理
- Android开发22——广播接收者BroadcastReceiver的原理和注册方式
- Android应用开发中BroadcastReceiver的用法
- Android开发小知识-BroadCastReceiver的使用
- OC开发底层原理
- Android图像显示的底层原理
- Android开发BroadcastReceiver详解
- Android开发之BroadcastReceiver
- android SharePreference底层原理
- java开发常被问到的面试题-HashMap的底层原理
- Android开发(41) android的BroadcastReceiver运用详解
- ajax的底层原理
- AFNetWorking的底层原理
- HashMap的底层原理
- HashMap的底层原理
- dubbo的底层原理
- Python with as
- hdu-4630-No Pain No Game-(树状数组,离线处理)
- 十月一小长假后(3月计划)
- 喷水装置(二)
- 使用POI实现Excel导入与导出
- android开发-BroadcastReceiver的底层原理
- zergRush 提权代码
- 数组的学习
- HDOJ 2085 核反应堆
- ContextMenu(上下文菜单)
- 三次握手及四次挥手简易原理图
- POJ1862 水
- linux系统ftp的安装与配置
- MongoDB:2-MongoDB的基本命令