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