BroadcastReceiver工作原理
--摘自《android插件化开发指南》
1.动态注册过程是注册Receiver并通知AMS,发送内容包括IntentFilter、一个实现了IIntentReceiver接口的Binder对象、activity所在的进程。
2.AMS收到消息后,会把所有Receiver保存在一个列表中
3.静态Receiver是在App安装的时候注册,PMS会解析AndroidManifest中的四大组件信息
4.动态Receiver和静态Receiver分别存在AMS不同的变量中,发送广播时,会把两种Receiver合并到一起,其中动态的排在静态的前面,所以动态Receiver永远优先于静态Receiver收到消息
5.Android系统每次启动时,都会重新安装所有的apk
6.音乐类播放器用到Receiver的地方很多,比如前台的activity,点击按钮,会给后台service发送一个receiver,后台做相应操作
注册过程
发送广播流程
第一步:Service发送广播给AMS
参数Intent携带了filter,告诉AMS什么样的Receiver可以接收这个广播
第二步:AMS接收广播,发送广播
Receiver分为无序Receiver和有序Receiver,所以广播发送队列也分为两个
第三步:APP处理广播
AMS将注册时候的IIntentReceiver接口对象传回给客户端
综上,客户端注册Receiver到AMS和AMS发送广播到客户端,都是跨进程通信的过程
广播的种类分为无序广播、有序广播和粘性广播。有序广播可以指定优先级。
粘性广播比如电量提醒,发出后,还能一直存在,未来的注册者也能收到这个广播。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现