Android 8.0对隐式广播的进一步限制

项目升级到Android O版本后,发现静态注册的广播接收器在8.0及以上版本手机上失效。文章详细解析了问题原因,涉及后台执行限制及隐式广播的限制,并提供了解决方案,包括指定广播接收器Component或包名。

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

项目targetSdkVersion升级到26后,对应的的是Android O版本,即Android 8.0系统。经测试发现针对8.0及以上安卓版本手机,AndroidMainfest.xml中静态注册的广播接收器失效,当App中对应intent filter类型广播发出时,广播接收器中的onReceive方法并未被系统回调。
 
且在Android Studio Logcat中,出现如下所示错误信息提示:

2018-12-20 17:34:55.588 749-767/system_process W/BroadcastQueue: Background execution not allowed: receiving Intent { act=com.corn.ui.setting.Action.TEST_BROADCAST flg=0x10 } to com.corn/.biz.setting.CornTestBroadcastReceiver
 
核查Android官方文档,Android 8.0系统,对后台执行有进一步限制,包括对隐式广播的限制。

对应Logcat中信息,搜索Android framework源码,按Logcat中的日志关键词搜索到对应代码位置。
可以选定Andrid版本,以及对应源码项目等搜索项搜索。
 
 
上图else if中条件,与官方文档阐述一致,想要广播发送继续生效,可以使此条件不满足即可。
对应的,一般可以指定对应的广播接收器Component,或对应的广播接收器包名。
对应intent,常用的具体方法可以是:intent.setClass()或intent.setComponent()或intent.setPackage()等写法
 
进一步,官方文档中指出了ACTION_PACKAGE_REPLACED 就是一种隐式广播,而ACTION_MY_PACKAGE_REPLACED 则为显式广播,可以通过搜索代码进一步核实下,看看基本写法是否与上述逻辑一致。
 
 
可见,源码中写法与上述分析一致。
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值