BroadcastReceiver本质上是一个系统的监听器,专门用来监听各个组件所发出的Broadcast,与前面介绍的各种组件的事件监听器OnXxxListener不同,OnXxxListener是程序级的监听器,他们运行在指定程序所在的进程中,当程序退出时,监听器就会随之关闭,但BroadcastReceiver属于系统级的监听器,他拥有自己的进程,只要存在与之匹配的Intent被广播出来,BroadcastReceiver就会被激发。



广播Broadcast的发送和接受过程:



  1. 在activity或service等组件中发出一个Broadcast Intent,以用来启动所有匹配该Intent的BroadcastReceiver,在ctivity或service等组件中发出一个Broadcast Intent的方法如下:
1. //创建Intent对象
Intent   intent  =  new  Intent();
//设置该广播能启动的BroadcastReceiver的Intent过滤条件
intent.setAction(“aaa”);
intent.putExtra(“msg”,”简单的消息!”);
//执行发送
// sendBroadcast()方法发送的广播为普通广播,
//广播有普通和有序之分,后文会有详细介绍
sendBroadcast(intent);2. 通过继承BroadcastReceiver类来自定义系统级监听器BroadcastReceiver的子类MyReceiver,在该子类中只需重写一个onReceive(Context,Intent)方法即可。
在onReceive()方法中有两个参数,其中Intent参数即为发送广播时创建的Intent,所以我们可以在BroadcastReceiver子类中获取到Broadcast Intent的信息,
包括:
intent.getAction();//允许启动的BroadcastReceiver的条件
intent.getStringExtra(“msg”);//广播内容3. 指定该BroadcastReceiver子类MyReceiver能匹配的Intent,如下:
<receicer  android:name=”.MyReceive”>
    <intent-filter>
          <!— 指定该BroadcastReceiver所能响应的Intent的activity -->
          <action android:name=”aaa”/>
    <intent-filter>
</receicer>

经过以上三步就完成了普通广播的发送与接收,首先启动activity,在activity中调用sendBroadcast()方法启动了所有符合条件的BroadcastReceiver子类,并且系统在创建这些子类对象时会自动触发它的onReceive()方法,onReceive()方法执行完后,BroadcastReceiver实例就会被销毁。



---------------------------------------------------------------------------------------------------



普通广播和有序广播的区别:



普通广播:可以在同一时刻被所有的接收者接收到,消息传递的效率比较高,缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止传播。



启动普通广播:sendBroadcast(intent);



有序广播:系统会根据接收者声明的优先级别按顺序逐个执行接收者,优先接收到Broadcast的接收者可以通过调用BroadcastReceiver的abortBroadcast()方法终止Broadcast的传播,这样后面的接收者就无法再获取到Broadcast了,不仅如此,对于有序广播而言,优先接收到Broadcast的接收者可以通过setResultExtras()方法将处理结果存入Broadcast中,然后传给下一个接收者,下一个接收者通过代码Bundle bundle = getResultExtras(true)可以获取上一个接收者存入的数据。



优先级别的声明在<intent-filter…>元素的android:priority属性中,值越大优先级别越高,取值范围为-1000~1000,也可以调用IntentFilter对象的setPriority()设置优先级别。



启动有序广播:sendOrderedBroadcast();