android广播 有序 无序,Android全局广播(无序,有序)

写这篇文章的原因:

最近博主在带两个小白学Android,在教广播的过程中发现了一些问题

大概如下:

1.Android8.0以上广播需要动态注册 (静态注册无效)

2.Android8.0以上两个应用间按照以前的操作发送广播后在另一个没办法接收到广播的情况

3.出现了广播接收者的抢先或重复问题

在文章最后会有解决办法!!!!

首先还是按照Android8.0以下来介绍一下广播

一.无序广播:启动方式------>Context.sendBroadcast() (异步)

所有的receivers(接收器)的执行顺序不确定,因此所有的receivers(接收器)接收broadcast的顺序不确定。

这种方式效率更高,但是BroadcastReceiver无法使用setResult系列、getResult系列及abort(中止)系列API

下面是简单操作:(以解屏,锁屏为例)

1.定义一个广播类

2f4ab146b7a00de5715d527176ea3270.png

2.对广播进行注册(静态或者动态)

静态:AndroidMainFest中的application标签下加上receiver的子标签(此注释只是一种比喻!!)

a2b450e2c9f45baffe3daf418406894d.png

动态:

7aedc70a7e3344bc2d171db9446c716b.png

3.如果是监听的网络等其他,记得要加权限

以上是系统的,下面介绍下广播发送者发送自定义广播------>sendBroadcast()

7f4a9319b24515413333a582ca68311d.png

二.有序广播 启动方式------>sendOrderedBroadcast()

里面两个参数的就不写了

46c9a1a885bf4a326d3b57777b1f8cfa.png

至于优先级(-1000到1000)的值 —>值越大越先接收到广播

静态:设置intent-fliter的中Priority

动态:直接调用intentFilter.setPriority();

与无序广播的区别(主要是两个方法)

1.setResultData() 修改广播中发送的对象

2.aboryBroadcast() 拦截广播

解决文章开始的问题:

1.Android8.0以上两个应用间按照以前的操作发送广播后在另一个没办法接收到广播的情况

解决办法:在发送广播的时候调用setPackage()方法,放入另一个应用的包名(另一个应用中注册文件package)

2.出现了广播接收者的抢先或重复问题

解决办法:静态注册和动态注册,不可同时存在,两者选其一

本文同步分享在 博客“计蒙不吃鱼”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值