广播

Broadcast分为两种广播

1、普通广播

是异步的,可以在同一时刻被所有接收者收到,消息传递效率比较高,但缺点是接收者不能将结果传递给下一个接收者,且无法终止Broadcast Intent的传播

2、有序广播

接收者将按预先声明的优先级依次接收Broadcast.如A高于B,了高于C,那么执行顺序为A到B到C.优先级声明在<intent-filter.../>元素的android:priority属性中,数字越大优先级越高.取值范围为-1000~1000,先可以在代码中调用IntentFilter对象的setPriority()进行设置.

发送有序广播的方法为sendOrderedBroadcast()优先接收到Broadcast的接收者可以通过setResultExtras(Bundle)方法将处理结果存入Broadcast中,然后传给下一个接收者,也可以通过abortBroadcast()终止广播传输。

下一个接收者通过Bundle bundle = new getResultExtras(true)可以获取上一个接收者存入的数据。

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(
                context,
                "接收到的Intent的Action为:" + intent.getAction() + "\n消息内容是:"
                        + intent.getStringExtra("msg"), 5000).show();
        //创建一个Bundle对象,并存入数据  
        Bundle bundle = new Bundle();
        bundle.putString("first", "第一个BroadcastReceiver存入的消息");
        //将bundle放入结果中  
        setResultExtras(bundle);
        //取消Broadcast的继续发送  
        abortBroadcast();
    }
}

public class MyReceiver2 extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = getResultExtras(true);
        //解析前一个BroadcastReceiver所存入的key为first的消息  
        String first = bundle.getString("first");
        Toast.makeText(context,"第一个Broadcast存入的消息为:" + first, 5000).show();
    }
}

配置两个receiver的优先级
<receiver android:name="MyReceiver" >
    <intent-filter android:priority="20">
        <action android:name="WangLi.Test.OrderBroadcast" />
    </intent-filter>
</receiver>
<receiver android:name="MyReceiver2" >
    <intent-filter android:priority="0">
       <action android:name="WangLi.Test.OrderBroadcast" />
    </intent-filter>
</receiver>

转载于:https://my.oschina.net/u/3342652/blog/1550683

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值