Android有序广播介绍

介绍

所谓有序广播,即存在一个发送方和众多接收方,接收方按照前后顺序排列,从第一个接收方接收并处理后依次向后传递;
类似于路由守卫,这意味着中间的任意一个接收方都可以截断广播从而阻止后续的接收方接收信息!


基本环境搭建

鉴于之前我们已经学习过简单的broadcast配置,这里就不做过多赘述,请按照如下代码搭建好默认的测试环境;

发送方页面配置
和上一章不同的是,这里使用sendOrderedBroadcast来注册有序广播,他接受的第二个参数我们一般填写null,第一个参数仍然是一个intent;

代码清单 BroadcastOrderActivity.java

public class BroadcastOrderActivity extends AppCompatActivity {

    public static final String ORDER_ACTION = "com.zhiyiyi.broadcast.order";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_broadcast_order);

        findViewById(R.id.btn_order).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("com.zhiyiyi.broadcast.order");
                sendOrderedBroadcast(intent,null);
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onStop() {
        super.onStop();
    }
}

配置两个一样的接收者模块
下面下的是接收者First的代码,接收者Second的代码和这个完全一样,你直接copy就好;

代码清单 receiver/OrderFirstReceiver.java

public class OrderFirstReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 因为发送页面已经定义好action常量,我们这里直接调用即可!
        if (intent != null && intent.getAction().equals(BroadcastOrderActivity.ORDER_ACTION)) {
            Log.d("receiver", "onReceive: first");
        }
    }
}

配置有序接收

因为这里的广播是有序接受的,会有以下两个接收的规则:

  1. 当接收者同时注册时(且不设置权限值时),注册快的那一个先接受,慢的后接收;
  2. 当设置权限值时,高权限的先接收
@Override
protected void onStart() {
    super.onStart();

    firstReceiver = new OrderFirstReceiver();
    IntentFilter firstFilter = new IntentFilter(ORDER_ACTION);
    firstFilter.setPriority(1);     // 优先级1,小于2,后接收
    registerReceiver(firstReceiver,firstFilter);

    secondReceiver = new OrderSecondReceiver();
    IntentFilter secondFilter = new IntentFilter(ORDER_ACTION);
    secondFilter.setPriority(2);    // 优先级2大于1,先接收
    registerReceiver(secondReceiver,secondFilter);
}


// 别忘了销毁两个接收者!
@Override
protected void onStop() {
    super.onStop();
    unregisterReceiver(firstReceiver);
    unregisterReceiver(secondReceiver);
}

截停广播

在任意一个接收者的onReceive方法里填写abortBroadcast即可截停

@Override
public void onReceive(Context context, Intent intent) {
    // 因为发送页面已经定义好action常量,我们这里直接调用即可!
    if (intent != null && intent.getAction().equals(BroadcastOrderActivity.ORDER_ACTION)) {
        abortBroadcast();   // 在此处截停广播
    }
}

END 下一章将会带大家更进一步的了解Android广播的其他的使用方法!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhillery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值