Android 广播介绍详情

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. 实际开发流程(四步)

  1. 写一个接收器(继承 BroadcastReceiver
  2. 注册它(静态或动态)
  3. 发送广播(sendBroadcast / sendOrderedBroadcast
  4. 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 里的"事件群发器":解耦很好用,但要注意生命周期、系统限制和性能。

相关推荐
yujunl13 分钟前
总结一下U9客开的成果
开发语言
独隅13 分钟前
KMP 全栈进化:Koog 框架打造纯 Kotlin AI Agent 实战效果
开发语言·人工智能·kotlin
hunterandroid26 分钟前
[Android 从零到一] Custom View 触摸反馈与手势冲突解决
android
lhldsg27 分钟前
社区健身场地规划实战指南:从器材配置到智能化管理经验分享
java·开发语言·经验分享·小程序
SomeB1oody1 小时前
【RustyML入门】5.0. 模型评估
开发语言·后端·机器学习·rust·教程
coderSong25681 小时前
Android | 四大组件之 BroadcastReceiver(广播接收器)
android
Evand J2 小时前
【MATLAB例程,PDR11】二维平面下的PDR(行人航位推算)步态检测与EKF融合定位,附代码的下载链接
开发语言·matlab·平面·pdr·行人导航·步态检测
牛油果子哥q2 小时前
C++STL算法超全精讲:排序/查找/去重/遍历/最值/合并全套API、仿函数、Lambda适配、实战避坑
开发语言·c++·算法
Xeon_CC2 小时前
用C++编写屏幕准星
开发语言·c++
孤存5222 小时前
c语言动态内存管理
c语言·开发语言·算法