记得在我上学的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校 的广播室的,一旦有什么重要的通知,就会播放一条广播来告知全校的师生。类似的工作机 制其实在计算机领域也有很广泛的应用,如果你了解网络通信原理应该会知道,在一个 IP 网络范围中最大的 IP 地址是被保留作为广播地址来使用的。比如某个网络的 IP 范围是
192.168.0.XXX,子网掩码是 255.255.255.0,那么这个网络的广播地址就是 192.168.0.255。 广播数据包会被发送到同一网络上的所有端口,这样在该网络中的每台主机都将会收到这条 广播。
为了方便于进行系统级别的消息通知,Android 也引入了一套类似的广播消息机制。相 比于我前面举出的两个例子,Android 中的广播机制会显得更加的灵活,本章就将对这一机 制的方方面面进行详细的讲解。
为什么说 Android 中的广播机制更加灵活呢?这是因为 Android 中的每个应用程序都可 以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广 播可能是来自于系统的,也可能是来自于其他应用程序的。Android 提供了一套完整的 API, 允许应用程序自由地发送和接收广播。发送广播的方法其实之前稍微有提到过一下,如果你 记性好的话可能还会有印象,就是借助我们第 2 章学过的 Intent。而接收广播的方法则需要 引入一个新的概念,广播接收器(Broadcast Receiver)。
广播接收器的具体用法将会在下一节中做介绍,这里我们先来了解一下广播的类型。
Android 中的广播主要可以分为两种类型,标准广播和有序广播。
标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出之后,所有的 广播接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可 言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。标准广播的工作流程如 图 5.1 所示。
图 5.1
有序广播(Ordered broadcasts)则是一种同步执行的广播,在广播发出之后,同一时刻 只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广 播才会继续传递。所以此时的广播接收器是有先后顺序的,优先级高的广播接收器就可以先 收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器 就无法收到广播消息了。有序广播的工作流程如图 5.2 所示。
图 5.2