Android BroadcastReceiver的分类以及使用场景

2,482 阅读3分钟

broadcast 相信大家都不会模式,它是Androi 四大组件之一,它的应用十分广泛。接下来按 分类和使用场景两部分来说说这个组件。

一、广播的主要分类 :

 常用广播,系统广播,有序广播,无序广播,粘性广播,应用内广播。

常用广播(Intent得到的广播):获得广播的接收者异步获取到对应广播,无需等待获得广播,此广播特点是无法终止,也就是不能截获广播。比如要发送一个这样的广播,注意setPakckage()要加上,否则Android8.0以上接收不到广播,当然还可以动态注册广播。

![](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1249e22874be4e779f188b69ccdbb9a7~tplv-k3u1fbpfcp-zoom-1.image)

广播接收者识别到该action-filter在onReceive会收到该广播,如果还有权限还需加上。

系统广播:指的是系统自带的广播,比如网络,电池电量变化,重启等,都可以通过发送系统广播来监听变化,通过发送对应的intent-filter(包括action),当使用系统广播时,只需要在注册广播接收者时定义相关的action即可,并不需要手动发送广播,如检测电池电量低。

注意,别忘了注销广播

有序广播:特点是可截获,可更改,也就是接收者按顺序接收广播,并且高优先级的先接收到,高优先级广播接收者可以截获或者修改广播,从而使得下一个接收者无法获取,或者获取到的是修改过的广播。一般有静态注册和动态注册两种。主要是使用sendOrderedBroadcast(intent,null);具体可以写demo测试。

无序广播:其实这个跟有序广播的差别就是接收是无序的,不可以截获,不可修改的,不按顺序的接收,一般也有静态注册和动态注册两种sendBroadcast(intent);

粘性广播:粘性消息在发送后就一直存在于系统的消息容器里面,等待对应的处理器去处理,如果暂时没有处理器处理这个消息则一直在消息容器里面处于等待状态,粘性广播的Receiver如果被销毁,那么下次重建时会自动接收到消息数据。应该比较少。

应用内广播:接收者和发送者都在同一APP内,它的优势是,安全性高和效率高。具体就是

1.注册广播时将export 设置为false,其他APP不能使用

2.发送者和广播接收者加上权限,用于验证

3.发送广播时指定接收者包名intent.setPakckage()

二、使用场景

常用广播和无序广播:大多数情况下的发送广播,比如检测WIFI信号强度,网络数据的变化等,普通的很多场景都可以使用

系统广播:主要监听系统内部的变化,比如网络变化,重启,屏幕关闭和开启等等。

粘性广播:用途不多。

有序广播:主要使用,比如收到短信,电话的拨入

应用内广播:主要使用在需要高效率和高保密性的APP中。