一、 定义
BroadcastReceiver
(广播接收器),属于Android四大组件之一- 在Android开发中,BroadcastReceiver的应用场景非常多广播,是一个全局的监听器,属于
Android
四大组件之一
Android
广播分为两个角色:广播发送者、广播接收者
二、 作用
-
用于监听 / 接收 应用发出的广播消息,并做出响应
-
应用场景
a. 不同组件之间通信(包括应用内 / 不同应用之间)b. 与
Android
系统在特定情况下的通信如当电话呼入时、网络可用时
c. 多线程通信
三、实现原理
-
Android
中的广播使用了设计模式中的观察者模式:基于消息的发布/订阅事件模型。因此,Android将广播的发送者 和 接收者 解耦,使得系统方便集成,更易扩展
-
模型中有3个角色:
- 消息订阅者(广播接收者)
- 消息发布者(广播发布者)
- 消息中心(
AMS
,即Activity Manager Service
)
-
原理描述:
-
广播接收者 通过
Binder
机制在AMS
注册 -
广播发送者 通过
Binder
机制向AMS
发送广播 -
AMS
根据 广播发送者 要求,在已注册列表中,寻找合适的广播接收者寻找依据:
IntentFilter / Permission
-
AMS
将广播发送到合适的广播接收者相应的消息循环队列中; -
广播接收者通过 消息循环 拿到此广播,并回调
onReceive()
-
特别注意:广播发送者 和 广播接收者的执行 是 异步的,发出去的广播不会关心有无接收者接收,也不确定接收者到底是何时才能接收到;
四、具体使用
具体使用流程如下:
接下来我将一步步介绍如何使用
即上图中的 开发者手动完成部分
4.1 自定义广播接收者BroadcastReceiver
-
继承自BroadcastReceivre基类
-
必须复写抽象方法onReceive()方法
- 广播接收器接收到相应广播后,会自动回调onReceive()方法
- 一般情况下,onReceive方法会涉及与其他组件之间的交互,如发送Notification、启动service等
- 默认情况下,广播接收器运行在UI线程,因此,onReceive方法不能执行耗时操作,否则将导致ANR。
-
代码范例
mBroadcastReceiver.java
public class mBroadcastReceiver extends