Android 广播介绍详情
1. 广播到底是啥?
你可以把广播理解成"群发消息"。
比如 App 里某个地方发了一条消息(Intent):"嘿,网络状态变了"。
只要谁注册了这个消息,谁就能收到,这个接收者就是 BroadcastReceiver。
所以广播的核心就是一句话:发送方不关心谁接,接收方只关心自己要不要听。
2. 广播有什么用?
开发里常见的用途主要就这几类:
- 听系统事件:网络变化、电量变化、开机完成等
- 模块之间通知:比如 A 页面通知 B 模块"数据更新了"
- 跨应用传消息:一个 App 通知另一个 App(需要注意权限和安全)
- 触发后台逻辑 :收到事件后,拉起
Service或交给WorkManager
简单说,广播很适合做"事件通知"。
3. 广播有哪几种?
3.1 普通广播(sendBroadcast)
- 发出去后,所有匹配的接收者都能收到
- 谁先收到不保证,偏"并发通知"
3.2 有序广播(sendOrderedBroadcast)
- 接收者按优先级一个个接收
- 前面的接收者可以改结果,甚至拦截后续传递
4. 接收广播怎么注册?
4.1 静态注册(写在 AndroidManifest.xml)
特点是:
- App 没开也有机会收到部分系统广播
- 适合系统级事件
- 但 Android 8.0+ 对隐式广播限制比较多
4.2 动态注册(代码里 registerReceiver)
特点是:
- 组件活着时才生效(比如
Activity在前台) - 灵活、可控,业务开发里更常用
5. 实际开发流程(四步)
- 写一个接收器(继承
BroadcastReceiver) - 注册它(静态或动态)
- 发送广播(
sendBroadcast/sendOrderedBroadcast) - 在
onReceive里处理逻辑(记得快速返回)
6. 一个常见动态注册示例
kotlin
class MyReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == "com.demo.ACTION_TEST") {
Log.d("MyReceiver", "收到广播")
}
}
}
kotlin
private lateinit var receiver: MyReceiver
override fun onStart() {
super.onStart()
receiver = MyReceiver()
val filter = IntentFilter("com.demo.ACTION_TEST")
registerReceiver(receiver, filter)
}
override fun onStop() {
super.onStop()
unregisterReceiver(receiver)
}
kotlin
val intent = Intent("com.demo.ACTION_TEST")
sendBroadcast(intent)
7. 开发时几个坑,提前避开
onReceive在主线程执行,别做耗时任务,不然容易卡 UI- Android 8.0+ 对隐式广播收紧了,优先用动态注册或显式广播
- 跨应用广播要做权限控制,避免敏感数据泄漏
- 复杂任务别硬塞广播,交给
WorkManager往往更稳
8. 一句话记住
广播就是 Android 里的"事件群发器":解耦很好用,但要注意生命周期、系统限制和性能。