Android广播机制体系初识

Android广播机制体系大白话

把Android的广播机制想象成小区里的“大喇叭”

谁在喊话?

任何App或系统都能当“大喇叭”,比如喊一嗓子“电量不足啦!”(这就是发送广播)

谁在听?

其他App只要“竖起耳朵”(注册BroadcastReceiver),就能听到自己关心的广播。比如外卖App专门监听“网络断开”的广播,一断网就提醒你

有啥好处?

不用互相认识:喊话的不用管谁在听,听的也不用管谁喊的,各干各的,互不打扰(解耦)

随叫随到:静态注册的广播(像24小时待命的保安)连App没打开都能响应;动态注册的(像临时工)灵活但得手动关掉

注意点

别磨蹭:广播处理要快,超过10秒系统会急眼(ANR)【只有有序广播有超时机制】

安卓8.0后规矩多了:乱喊广播会被限制,得用显式广播

0

广播就是Android里的“喊话-听响”机制,让App之间既能默契配合,又不用互相绑死!对应设计模式中的观察者模式

0

1. 广播机制总览

├─ 定义:组件间通信的发布-订阅模型

└─ 特点:跨进程、松耦合、系统级事件通知

2. 广播机制原理

2.1 内核层

│   ├─ Binder驱动:跨进程通信基础

│   └─ 进程间通信(IPC)机制

2.2 框架原理

│   ├─ ActivityManagerService(AMS)中枢控制

│   ├─ IntentFilter匹配引擎

│   └─ 消息队列调度模型

3. 广播接收者

3.1 动态广播接收者

│   ├─ 注册方式

│   │   ├─ Context.registerReceiver()

│   │   └─ 需配对unregister

│   └─ 生命周期:与注册Context绑定

3.2 静态广播接收者

│   ├─ AndroidManifest.xml声明

│   └─ 全局监听(即使应用未运行)

4. 广播发送者

4.1 按有序性划分

│   ├─ 无序广播:sendBroadcast()

│   └─ 有序广播:sendOrderedBroadcast()

4.2 按系统属性划分

│   ├─ 普通广播:应用自定义

│   └─ 系统广播:Intent.ACTION_XXX

4.3 按前后台划分

│   ├─ 前台广播:带FLAG_RECEIVER_FOREGROUND

│   └─ 后台广播:默认类型

5. 广播分发中心(AMS)

5.1 注册模块

│   ├─ 存储结构

│   │   ├─ ReceiverList链表

│   │   └─ IntentResolver匹配树

│   └─ 检索优化:Hash索引+快速匹配

5.2 分发模块

│   ├─ 队列类型

│   │   ├─ 前台队列:parallelBroadcastQueue

│   │   └─ 后台队列:orderedBroadcastQueue

│   └─ 分发流程

│       ├─ 无序广播:并行触发

│       └─ 有序广播:串行+优先级处理

6. 广播接收全流程

6.1 发送阶段

│   └─ Context.sendBroadcast()调用链

6.2 收集与入队

│   ├─ 接收者收集

│   │   ├─ 静态接收者:PackageManager查询

│   │   └─ 动态接收者:AMS实时记录

│   └─ 队列策略

│       ├─ 无序广播:直接投递

│       └─ 有序广播:优先级排序

6.3 分发执行

│   ├─ 有序广播处理

│   │   ├─ 超时监控:BROADCAST_TIMEOUT_MSG

│   │   └─ 结果传递:setResultData

│   └─ 静态接收者:独立进程唤醒

6.4 接收处理

│   ├─ 动态接收者:主线程回调onReceive

│   └─ 静态接收者:独立进程生命周期

0

广播分发中心:SystemServer进程(中框,Android系统核心)

核心成员:

AMS(ActivityManagerService):总调度

BroadcastQueue:排队管理(前台/后台队列)

BroadcastDispatcher:类似快递员,按名单派件

备注:由于广播发送者一般都是位于不同的进程,故通信是基于binder

0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值