Android四大组件之BroadcastReceiver(三)

本文详细阐述了Android中有序广播的特点,包括广播的拦截机制,并对比了有序广播与标准广播的不同之处。此外,还讨论了广播的安全性问题及解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇讲了如何动态注册广播、如何静态注册广播,以及两者之间的区别,文章链接如下:

Android四大组件之BroadcastReceiver(二)_水很清的博客-优快云博客

接下来讲一下有序广播中对广播的拦截、有序广播与标准广播的区别、广播的安全性问题

一、有序广播

上一篇已经讲过,有序广播是同步的,同一个时刻只有一个接收者接收广播,当该接收者处理完事务后广播才会继续往下传播,但是当前的接收者也可以对广播进行一个拦截截断,使广播到了自己后就完成使命,不会继续传播。

在这一点有点类似于Android的事件分发机制,事件被消费了,就不会往下传递。截断广播可以直接在接收者的onReceiver方法中调用一下方法:

abortBroadcast();

二、有序广播与标准广播的区别

标准广播:

1、同级别接收者先后是随机的(无序的)

2、级别低的后接收到广播

3、接收器不能截断广播的继续广播,也不能处理广播

4、同级别动态注册高于静态注册

有序广播:

1、同级别接收是随机的(结合下一条)

2、同级别动态注册高于静态注册

3、排序规则为:将当前系统中所有有效的动态注册和静态注册的BroadcastReceiver按照priority属性值从大到小排序

4、先接收的BroadcastReceiver可以对此有序广播进行截断,使后面的BroadcastReceiver不再接收到此广播,也可以对广播进行修改,使后面的BroadcastReceiver接收到广播后解析得到错误的参数值。

三、安全性问题

广播可以跨进程(跨app)通信,且exported属性在有intent-filter的情况下默认值是true,所以可能出现以下的安全隐患

1、其他App可能针对性的发出与当前app intent-filter相匹配的广播,导致app不断的接收到广播并处理

2、其他App可以注册与当前app一样的intent-filter用于接收广播,获取广播具体的信息。

针对以上两种情况,业界常见的一些增加安全性的方案包括:

1、对于应用内部的发送和接收的广播,将exported设置成false,使得非本app内部发出的广播不被接收到。

2、在广播发送和接收时,增加相应的permission,用于权限验证。

3、发送广播时,指定特定广播接收器所在的包名,具体通过intent.setPackage(packageName)指定,这样子此广播将只会发送到此包中app内与之相匹配的有效广播接收器中。

4、采用LocalBroadcastManager的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值