您的位置:首页 > 移动开发 > Android开发

[Android基础]BroadcastReceiver

2015-11-06 22:23 309 查看
对于广播消息的处理,大致要经过消息发送、BroadcastReceiver注册和消息处理三个环节。

一.消息发送

消息发送有三种方式:

a.sendBroadcast()

b.sendStickyBroadcast()

sendStickyBroadcast()方法主要的不同是,Intent在发送后一直存在,并且在以后调用registerReceiver()注册相匹配的BroadcastReceiver时会把这个Intent直接返回。

注意要添加权限:<uses-permission android:name="android.permission.BROADCAST_STICKY"/>

c.sendOrderBroadcast()

使用sendBroadcast()或sendOrderBroadcast()方法发出去的Intent,所有满足条件的BroadcastReceiver都会随机地执行其onReceive()方法,而sendOrderBroadcast()发出去的Intent,会根据BroadcastReceiver注册时Intent Filter设置的优先级的顺序从高到低先后执行,相同优先级的BroadcastReceiver则是随机执行。在消息处理执行过程中,前面执行的BroadcastReceiver可以根据业务逻辑放弃消息处理,则后面的BroadcastReceiver将不再执行。

对于有序广播,前面的接受者可以将数据通过setResultExtras(Bundle)方法存放结果对象,然后传给下一个接受者,下一个接受者通过代码getResultExtras(true)可以获取上一个接受者存入在结果对象中的数据。使用abortBroadcast()可以停止广播的传播。

二.注册BroadcastReceiver

注册BroadcastReceiver有两种方式:

a.静态注册。在AndroidManifest.xml中用<receiver>标签声明,并在标签内用<intent-filter>标签设置过滤器。

b.动态注册。在代码中使用registerReceiver(BroadcastReceiver,IntentFilter)方法。取消注册则使用unregisterReceiver(BroadcastReceiver)。

要注意此时如果用动态注册BroadcastReceiver的Context对象被销毁时,BroadcastReceiver也就自动取消注册了。

根据Activity组件的生命周期,通常在onResume中注册BroadcastReceiver,在onPause中取消注册,这样可以大大降低系统的负担。

三.消息处理

若在使用sendBroadcast()的方法时指定了接收权限,则只有在AndroidManifest.xml中用标签<uses-permission>声明了拥有此权限的BroadcastReceiver才会有可能接收到发送过来的Intent。

同样,若在注册BroadcastReceiver时指定了接收权限,则只有在包内的AndroidManifest.xml中用标签<uses-permission>进行声明,拥有此权限的Context对象所发送的Broadcast才能被这个BroadcastReceiver所接收。

一个BroadcastReceiver可以处理多个广播消息,具体做法为在onReceive方法调用Intent参数的getAction()判断传进来的动作,即可进行不同的处理。

BroadcastReceiver对消息的处理是一种异步方式,发出消息的组件并不需要等待BroadcastReceiver处理完毕才执行其他动作。一旦BroadcastReceiver执行完onReceiver方法,BroadcastReceiver就有可能被Android系统回收。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  BroadcastReceiver