Android动态广播注册收发原理

一、动态广播的注册流程

1. ​​注册方式​

动态广播通过代码调用 Context.registerReceiver() 方法实现,需显式指定 IntentFilter 和接收器实例:

复制代码
// 示例:在 Activity 中注册监听网络变化的广播
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(networkChangeReceiver, filter);
  • ​生命周期绑定​ :动态注册的接收器仅在注册期间有效(如 Activity 处于 onResume() 状态时),需在 onPause()onDestroy() 中调用 unregisterReceiver() 释放资源。
  • ​优先级控制​ :通过 IntentFilter.setPriority(int) 设置接收器优先级,影响有序广播的分发顺序。
2. ​​系统级处理​
  • ​AMS 注册​ :调用 registerReceiver() 时,系统会通过 Binder 调用 AMS 的 registerReceiver() 方法,将接收器加入 ReceiverDispatcher 的监听列表。
  • ​进程绑定​:动态接收器与宿主进程(如 Activity 所在进程)强关联,进程终止后自动失效。

二、广播的发送与接收原理

1. ​​发送广播​
  • ​Intent 封装​ :通过 Intent 指定广播动作(action)、数据(extras)及目标接收器(setPackage())。
  • ​发送方式​
    • ​无序广播​sendBroadcast(),所有匹配接收器并行处理。
    • ​有序广播​sendOrderedBroadcast(),按优先级顺序处理,支持终止传播(abortBroadcast())。
2. ​​接收流程​
  1. ​AMS 分发​ :发送广播后,AMS 根据 IntentFilter 匹配动态注册的接收器列表。
  2. ​消息队列调度​ :AMS 将广播封装为 BroadcastRecord,加入 BroadcastQueue 队列。
  3. ​线程执行​ :通过 HandleronReceive() 调度至宿主进程的主线程执行(避免跨线程问题)。
3. ​​数据传递​
  • ​Intent 携带数据​ :发送方可通过 putExtra() 附加数据,接收方从 Intent 中提取。
  • ​跨进程通信​ :若接收器与发送方进程不同,AMS 通过 Binder 机制跨进程传递 Intent

三、系统级调度机制

1. ​​AMS 的核心作用​
  • ​广播队列管理​ :AMS 维护全局的 BroadcastQueue,按时间顺序或优先级调度广播。
  • ​权限校验​ :检查发送方与接收方的权限声明(如 android:permission),防止未授权广播。
  • ​进程状态维护​:若接收器所在进程未启动,AMS 会触发进程启动(仅限静态注册,动态注册需宿主进程存活)。
2. ​​有序广播的特殊处理​
  • ​优先级队列​ :接收器按 android:priority 排序,高优先级者先处理。
  • ​结果反馈​ :接收器可通过 setResultExtras() 传递数据给后续接收器,或调用 abortBroadcast() 终止传播。
3. ​​性能优化​
  • ​批量处理​:同一时间点到达的广播可能合并处理,减少上下文切换。
  • ​延迟分发​ :对耗时操作(如网络请求)自动延迟至 onReceive() 返回后执行。
相关推荐
VincentWei959 分钟前
Compose:MutableState 和 mutableStateOf
android
jian1105819 分钟前
Android studio配置flutter,mac Android studio 发现苹果手机设备
android·flutter·android studio
2501_940007891 小时前
Flutter for OpenHarmony三国杀攻略App实战 - 性能优化与最佳实践
android·flutter·性能优化
Rysxt_2 小时前
UniApp获取安卓系统权限教程
android·uni-app
毕设源码-朱学姐2 小时前
【开题答辩全过程】以 基于安卓的教师上课辅助系统为例,包含答辩的问题和答案
android
诸神黄昏EX4 小时前
Android Safety 系列专题【篇二:AVB签名】
android
2601_949543014 小时前
Flutter for OpenHarmony垃圾分类指南App实战:意见反馈实现
android·flutter
urkay-4 小时前
Android 中实现 HMAC-SHA256
android·开发语言·python
YIN_尹5 小时前
【MySQL】增删查改的艺术——数据库CRUD完全指南(下)
android·数据库·mysql
m0_748233175 小时前
PHP8.0新特性全解析
android