BroadcastReceiver是一种全局监听器,用来实现系统中不同组件之间的通信,有时候也会用来作为传输少量而且发送频率低的数据,但是如果数据的发送频率比较高或者数量比较大就不建议用广播接收者来接收了,因为这样的效率很不好,因为BroadcastReceiver接收数据的开销还是比较大的。
广播的分类:
1)普通广播:完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高,并且无法中断广播的传播,
2)有序广播:发送有序广播后,广播接收者将按预先声明的优先级依次接收Broadcast,优先级高的优先接收到广播,而在其onReceiver()执行过程中,广播不会传播到下一个接收者,此时当前的广播接收者可以abortBroadcasr()来终止广播继续向下传播,也可以将intent中的数据进行修改设置,然后将其传播到下一个广播接收者,sendOrderedBroadcast(intent,null);//发送有序广播
3)粘性广播:sendStickyBroadcast()来发送该类型的广播信息,这种的广播最大特点是,当粘性广播发送后,最后的一个粘性广播会滞留在操作系统中,如果在粘性广播发送后的一段时间里,如果有新的符合广播的动态注册的广播接收者注册,将会收到这个广播信息,虽然这个广播是在广播接收者注册之前发送的,另外一点,对于静态注册的广播接收者来首,这个等同于普通广播。
广播使用的方式和场景 1)App全局监听:在AndroidManifest中静态注册的广播接收器,一般我们在收到该信息后,需要做一些相应的动作,而这些动作与当前App的组件,比如Activity或者Service是否运行无关,比如我们在集成第三方Push SDK时,一般都会添加一个静态注册的BroadcastReceiver来监听Push消息,当有Push消息过来时,会在后台做一些网络请求或者发送通知等。
2)组件局部监听:这种主要是在Activity或者Service中使用registerReceiver()动态注册的广播接收器,因为当我们收到一些特定的消息,比如网络连接发送变化时,我们可能需要在当前Activity页面给用户一些UI上的提示,或者将Service中的网络请求任务暂停,所以这种动态注册的广播接收器适合特定组件的特定消息处理。