一、什么是BroadcastReceiver?
BroadcastReceiver是Android中用处较大的异步消息机制。它有轻量和跨进程的性质。一个BroadcastReceiver对象的生命周期不超过5秒,不能绑定服务和做一些耗时的操作,但是用来收发信号和消息则戳戳有余。系统也经常有BroadcastReceiver发送消息。
二、BroadcastReceiver如何使用呢?
首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用 sendOrderBroadcast()或sendStickyBroadcast()或者sendBroadcast()方法,通过动态或者静态的方式在AndroidManifest注册广播并设置过滤器,把 Intent对象以广播方式发送出去,需要注意的是在sendStickyBroadcast时,需要在AndroidManifest里注册声明使用权限:android.permission.BROADCAST_STICKY。
当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent 相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法。所以当我们定义一个BroadcastReceiver的时 候,都需要实现onReceive()方法。
普通广播:
普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。
有序广播:
有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播。
三、注册BroadcastReceiver有两种方式:
静态注册:
在AndroidManifest.xml中用标签生命注册,并在标签内用标签设置过滤器。
<receiver android:name="xxx.yyy.zzz"> //继承BroadcastReceiver,重写onReceiver方法
<intent-filter>
<action android:name="aaa.bbb.ccc"></action> //使用过滤器,接收指定action广播
</intent-filter>
</receiver>
动态注册:
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(“aaa.bbb.ccc”); //为BroadcastReceiver指定action,使之用于接收同action的广播
registerReceiver(BroadcastReceiver,intentFilter);