当前位置: 首页 > news >正文

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() 返回后执行。

相关文章:

  • 【Go语言基础【7】】条件语句
  • Redux 实践与中间件应用
  • GitHub 趋势日报 (2025年06月05日)
  • 数据结构之LinkedList
  • day23 pipeline管道
  • Web前端基础:HTML-CSS
  • win10+TensorRT+OpenCV+Qt+YOLOV8模型部署教程
  • 2025年我国数字经济产业发展概述
  • uniapp Vue2 获取电量的独家方法:绕过官方插件限制
  • vscode使用系列之快速生成html模板
  • ubuntu 22 安装milvus
  • vue-20(Vuex 状态管理的最佳实践)
  • uniapp+vue2解构赋值和直接赋值的优缺点
  • VSCode - VSCode 放大与缩小代码
  • 使用阿里云百炼embeddings+langchain+Milvus实现简单RAG
  • Editing Language Model-based Knowledge Graph Embeddings
  • 蓝牙技术栈BR/EDR和LE详解
  • ES数据聚合
  • NHY3274TH替代传感器比较推荐光宝【LTR-381RGB-01】替代方案
  • VMware Workstation 与 Hyper-V 不兼容。请先从系统中移除 Hyper-V 角色,然后再运
  • wordpress+增加域名/seo视频网页入口网站推广
  • 北京网站如何制作/网络优化软件
  • 巩义专业网站建设价格/教育培训机构报名
  • 网站认证必须做么/外链网
  • 最新新闻热点事件简短/郑州网站seo服务
  • 建设一个大型网站大概费用/seo推广效果怎么样