[Android基础]BroadcastReceiver

对于广播消息的处理,大致要经过消息发送、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系统回收。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值