BroadcastReceiver

BroadcastReceiver

BroadcastReceiver也是Android四大组件之一。顾名思义,是接收消息的组件。比如Android系统的一些事件,wifi状态,亮屏灭屏,开机等等,好多事件都会发出广播。比如wifi状态变化,当我们的app收到消息时,可以及时提醒用户从wifi切换到了手机流量。当然了,我们也可以在自己的app中发消息,并使用BroadcastReceiver来接收。由于发送者和接收者是相互独立的,所以可以做到夸线程,甚至夸进程收发。虽然可以有效的减少我们在夸进行线程间的麻烦,但是会使得机构十分松散,不容易维护。所以还是慎用。

1.收发

1.1发

context.sendBroadcast(intent);

这样就可以发送一个最简单的广播,需要构造intent,设置action等参数(是否设置其他参数根据需求)

1.2收

定义一个类,继承BroadcastReceiver,实现onReceive方法,方法中会传过来intent,这里我们可以对想关注的action进行过滤。注意,onReceive方法是在主线程,不能执行耗时操作

最简单的收发就是这么简单,当然,如果有需求的话,还可以发送有序广播,也就是说广播的接收是有顺序的,并且可以在每一个顺序节点上对intent携带的内容进行修改。

2.注册

BroadcastReceiver也是Android的四大组件之一,所以也需要配置在AndroidManifest.xml中(静态注册)。

但是比较特殊的事,BroadcastReceiver也可使用代码配置(动态注册)

二者的区别是:静态注册,无论app是否在运行,只要有满足了onReceive条件的广播,就会启动组件。动态注册,只在注册的有效期内会响应onReceive。

上面提到了有效期,注意,动态注册的方式,一定要及时解注册,否则可能造成内存泄漏

3.安全

安全问题也从两个角度出发,一个收,一个发

3.1发

如果你的广播只是在本app中使用,不希望被其他app收到,可以考虑使用sendLocalBroadcast

如果你的广播需要发送到其他app,可以给intent设置package,这样就会指定目标应用。为了进一步安全,你还可以设置权限,只有设置了响应权限的应用才能接受

3.2收

如果你的广播接收者只需要响应本app的广播,可以设置exported属性,表示不响应外部广播。

如果你的广播接收者需要响应其他app的广播,可以使用上面提到的,配置权限

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值