粘滞广播和有序广播

有序广播
1.概述
Android提供了两种发送广播的方式,一种是发送无序广播,第二种是有序广播。两种广播的特点是:
无序广播的效率较高,所有符合条件的广播接收者都能接收到广播。
有序广播:接收广播有先有后,先后次序通过设置优先级来区别。在项目清单文件中通过以下代码完成优先级的设定:
<intent-filter anrdoid:priprity="10">
以上设置了优先级为10.那么比10小的广播接收者将在当前广播接收者之后接收发到的有序广播。
有序广播的另一个特点是优先级高的广播接收者可以修改发送广播中的数据,并可以传递给优先级低的接收者。优先级高的接收者可以终止优先级低的接收者发送,即终止广播。
2.常用属性:
1).Priority属性:
作用:该属性设置广播的优先级别,在项目清单中注册receiver时定义。取值范围-1000——1000,实际的值可以超过该范围。
2).示例代码:
<receiver android:name=".FirstReceiver">
<intent-filter android:priority="20">
<action android:name="liuke.Receiver">
</intent-filter>
3.常用权限
1)android.permission.RECEIVE_SMS
作用:申请接收短信的权限
示例代码:
<uses-permission>
android:name="android.permission.RECEIVE_SMS"
</uses-permission>
2)android.permission.PROCESS_OUTGOING_CALLS
作用:申请播出电话的权限
示例代码:
<uses-permission>
android:name="android.permission.PROCESS_OUTGOING_CALLS"
</uses-permission>
3)android.permission.RECEIVE_BOOT_COMPLETED
作用:设置开机自动启动权限
示例代码:
<uses-permission>
android:name="android.permission.RECEIVE_BOOT_COMPLETED"
</uses-permission>
4.发送有序广播
context对象的sendOrderedBroadcast(intent,permission)
5.接收有序广播
1)优先级高的接收器先接受
2)相同优先级,动态注册的接收器先接收
3)相同优先级的静态注册的接收器,先注册的先接收


常用方法:
1.Boolean isOrderedBroadcast()
作用:若是有序广播则返回true,若是无序广播则返回false
2.absortBroadcast();
作用:终止广播,优先级低的广播接收者将无法得到当前的广播
3.setResultExtras(Bundle bundle)
作用:修改数据并发送给优先级低的接收者
示例代码:
Bundle bundle=new Bundle();
bundle.putString("msg","第二个广播接收者接到了广播")
setResultExtras(bundle);
以上代码将字符串一键值对的形式保存在Bundle对象中,并通过setResultExtras方法发送给优先级低的广播接收者。
void setResultData(String data)
作用:重载的方法
参数data:发送给优先级低的接收者的字符串
4.int getResultCode();
作用:返回前一个接收者返回结果码
5.String getResultCode();
Bundle getResultExtras(boolean markMap)
作用:获取优先级高的接收者发送的数据
参数markMap:值为true时,当上一个将广播接收者的setResultExtras参数为null,则getResultExtras获取的Bundle对象是一个有地址但内容为空的集合
markMap值为false时,则getResultExtras获取的对象是null。
6.public abstract void onReceive(Context context,Intent intent)
作用:该方法必须有子类实现,当接收到广播时将回调本方法。
参数context:发送广播的组件对象
参数intent:发送广播的组件对象发送过来的Intent对象。该题图对象可封装传递过来的数据
提示:onReceive方法中不能执行超过10秒的耗时操作,否则将出现异常。


粘滞广播
1.概述:
粘滞广播:发出的广播会一直滞留(等待),以便有人注册这则广播消息后能够尽快的收到这条广播。其他功能与sendBroadcast相同。
提示:
使用sendStickyBroadcast发送官博,需要获得BROADCAT_STICKY permission,如果没有这个permission则会抛出异常。
2.广播的发送与移除
1)发送:context对象的sendStickyBroadcast(inttent)

2)移除:context对象的removeStickyBroadcast(intent)






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值