起因:Android系统的四大组件还有一种BroadcastReceiver ,其是全局的监听器,用于监听系统全局的广播消息。由于它是全局监听器,因此可以非常方便地实现系统中不同组件之间的通信。
BroadcastReceiver用于接收程序所发出的Brooadcast Intent,启动步骤相同,两步:
1.创建需要启动的 BroadcastReceiver的Intent 。
2.调用Context的sendBroadcast()或者 sendOrderedBroadcast()方法来启动指定的BroadcastReceiver。注意,当应用程序发出一个Broadcast·后,所有匹配该Intent的BroadcastReceiver都有可能被启动,此时需要sendOrderedBroadcast()方法发送广播,并在实现广播基础之上,配置Intent的时候,设置其优先级。
3.Broadcast属于系统级的监听器,它拥有自己的进程,只要存在与之匹配的Intent被广播出来,Broadcast总会被激活。
4.实现BroadcastReceiver很简单,定义一个类继承BroadcastReceiver,只要实现 onReceive()方法即可 ,一旦实现了BroadcastReceiver,接下来指定BroadcastReceiver能匹配的Intent两种方式
@1、在AndroidManifest.xml文件中配置
<receiver android:name=”.IncomingSmsReceiver”>
<intent-filter>
<action android:name=”android.provider.Telephony.SMS_RECEIVED”/>
<intent-filter>
@2、IntentFilter filter=new IntentFilter(“android.provider.Telephony.SMS_RECEIVED”)
IncomingSMSReceiver receiver =new IncomingSmsReceiver(); //此类继承BroadcastReceiver,并实现onReceive()方法
registerReceiver(receiver,filter)
5.BroadReceiver生命周期很短,耗时的操作绝不能在BroadcastReceiver内部完成,因为其执行10秒后如果无法完成任务,Android会认为该程序无响应,如果是耗时的操作,一般通过Intent启动一个Sercice来完成该操作,不应考虑新线程去完成耗时的操作。
6、sendBroadcast() 和 sendOrderedBroadcast() 的区别
@1、NormalBroadcast普通广播是完全异步的,可以在同一时刻被所有的接受者接收到,消息传递效率比较高,但缺点是接受者不能将处理结果传递给下一个接受者,并且无法终止Broadcast的传播。
@2、 Ordered Broadcast ,其是按预先声明的预先优先级依次接收Broadcast,如A的级别高于B,B的级别高于C,那么,Broadcast先传给A,再传给B,最后传给C 。优先级别声明在 《Intent-filter》元素的android:prority 属性中,数越大,优先级别越高,范围-1000~1000,Ordered Broadcast接收者可以终止Broadcast Intent的传播,一旦使用abortBroadcast () 终止,则后面的Broadcast无法接收到Broadcast , 还有此Broadcast 可以传递数据,其可以将数据经过处理后传递给下一个接收者,如:A得到Broadcast后,可以往它的结果对象中存入数据 ,当Broadcast传给B时,B可以从A的结果对象中得到A存入的数据。
7、接收系统的广播消息,除了接收用户发送的广播之外,BroadcastReceiver还有一个重要的用途:接收系统广播,如果应用需要在系统特定时刻执行某些操作,就可以通过监听系统广播来实现。