第八章:Broadcast 广播的使用
广播机制的概述
通常情况下在学校的每个教室都会装有一个喇叭,这些喇叭是接入到学校广播室的。如果有重要通知,会发送一条广播来告知全校师生。为了便于发送和接收系统级别的消息通知,Android
系统也引入了一套类似广播的消息机制。
Android
中的广播( Broadcast
)机制用于进程/线程间通信,该机制使用了观察者模式,观察者模式是一种软件设计模式,该模式是基于消息的发布/订阅事件模型,该模型中的消息发布者是广播机制中的广播发送者,消息订阅者是广播机制中的广播接收者,广播机制的具体实现流程。
广播机制的实现流程:
- 广播接收者是通过
Binder
机制在AMS
(Activity Manager Service
)中进行注册的 - 广播发送者是通过
Binder
机制向AMS
发送广播 AMS
查找符合相应条件(IntentFilter/Permission)的广播接收者 (BroadcastReceiver),将广播发送到相应的消息循环队列中- 执行消息循环时获取到此广播,会回调广播接收者(
BroadcastReceiver
)中的onReceive()
方法并在该方法中进行相关处理
广播接收者
概念
Android
系统中内置了很多广播,例如手机开机完成、电池电量不足时都会发送一条广播- 为了监听来自系统或者应用程序的广播事件,
Android
系统提供了BroadcastReceiver
(广播接收者)组件 - 当
Android
系统产生一个广播事件时,可以有多个对应的广播接收者接收并进行处理
创建
- 通过在应用程序的包中创建一个类继承
BroadcastReceiver
并重写onReceive()
方法来实现的 - 通过选中应用程序中的包,右击选择
New
→Other
→Broadcast Receiver
选项来创建的
注意
创建完广播接收者之后还需要对广播接收者进行注册才可以接收广播。
自定义广播与广播的类型
自定义广播
- 当系统提供的广播不能满足实际需求时,可以自定义广播,同时需要编写对应的广播接收者。
- 当自定义广播发送消息时,会储存到公共消息区中,而公共消息区中如果存在对应的广播接收者,就会及时的接收这条信息。
广播的类型
- 无序广播:无序广播是完全异步执行,发送广播时所有监听这个广播的广播接收者都会接收到此消息,但接收的顺序不确定。
- 有序广播:按照接收者的优先级接收,只有一个广播接收者能接收消息,在此广播接收者中逻辑执行完毕后,才会继续传递。