广播(Broadcast)是一种广泛用于应用程序之间传递消息的机制,是 Android系统的四大组件之一。广播机制包含3 个基本要素∶广播(Broadcast),用于发送广播;广播接收器(BroadcastReceiver),用于接收广播;意图内容(Intent),用于保存广播相关信息的媒介。
广播分为两个方面∶广播发送者和广播接收者(Broadcast Receiver),在 Android 系统中很多操作完成以后都会发送广播,比如说发送短信息、打出一个电话、开机或者网络状态改变和电量改变等。如果某些应用程序想要在这些操作完成以后做一些相应的处理,就可以对这些广播做接收。这个广播跟传统意义中的电台广播有些相似,只是传统电台广播发送的是语音而 Android系统发送的是目的意图 Intent。之所以叫广播,就是因为它与传统的广播很相似,只负责播放而不管接收者"听不听",也就不管接收方如何处理。
Android中的每个应用程序都可以对自己需要的广播进行注册,这样该程序就可以接收到自己需要的广播内容,这些广播可能是来自于系统的,也可能是来自于其他应用程序的。Android 提供了一套完整的 API,允许应用程序自由地发送和接收广播。
Android 中的广播按照发送类型可以分为两种:普通广播和有序广播。
●普通广播(Normal broadcasts)是一种完全异步执行的广播,效率较高,在广播发出之后,所有的广播接收者甚至可能会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言。
● 有序广播(Ordered broadcasts)则是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收者能够收到这条广播消息,当这个广播接收者中的逻辑执行完毕后,广播才会继续传递。广播接收者是有先后顺序的,优先级高的广播接收者可以先收到广播消息,并且前面的广播接收者还可以截断正在传递的广播,使后面的广播接收者无法收到广播消息。
在开发中,广播一般会在下面几种情况下使用∶
● 同一App 内部的同一组件内的消息通信(单个或多个线程之间)。
● 同一App内部的不同组件之间的消息通信(单个进程)。
● 同一App 具有多个进程的不同组件之间的消息通信。
● 不同App组件之间的消息通信。
●Android系统在特定情况下与App 之间的消息通信。
在这里我们可以看到 Broadcast 也可以在不同 App 应用之间进行消息通信。如果我们开发一个应用就需要在允许的情况下自动填充短信中的验证码,那么这时要监听用户短信,短信和自己的 App 就处在不同的进程之间。Activity 和 Service 在某些情况下的通信也可以借助Broadcast,这时就是在同一进程不同组件之间的消息通信。
另外,需要注意的是,当我们通过广播接收者处理相应的广播时,不推荐进行任何耗时操作,因为在广播接收器中是不允许开启线程的,当 onReceive()方法运行了较长时间而没有结束时,程序就会报错。因此广播接收器更多的是扮演一种打开程序其他组件的角色,比如创建一条状态栏通知或者启动一个服务等。
源码下载地址:链接:https://pan.baidu.com/s/1ExoSxaQRdjmwUUnDuSbUIQ?提取码:43ka
|