Android 8.0对隐式广播的进一步限制
2024-08-26 07:46:47
项目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中的日志关键词搜索到对应代码位置。
这里推荐使用 http://androidxref.com/
可以选定Andrid版本,以及对应源码项目等搜索项搜索。
上图else if中条件,与官方文档阐述一致,想要广播发送继续生效,可以使此条件不满足即可。
对应的,一般可以指定对应的广播接收器Component,或对应的广播接收器包名。
对应intent,常用的具体方法可以是:intent.setClass()或intent.setComponent()或intent.setPackage()等写法。
进一步,官方文档中指出了ACTION_PACKAGE_REPLACED 就是一种隐式广播,而ACTION_MY_PACKAGE_REPLACED 则为显式广播,可以通过搜索代码进一步核实下,看看基本写法是否与上述逻辑一致。
可见,源码中写法与上述分析一致。
最新文章
- geotrellis使用初探
- Css、javascript、dom(二)
- 多媒体(1):MCI接口编程
- ASP.NET c# Redis 开发
- array,vertor,arraylist,hashable,hashmap等几个易混淆概念的区别
- django-cms 代码研究(七)杂七杂八
- win2003 多域名绑定一个ip
- mysql可视化管理工具
- 富文本web编辑器(UEditor)
- CLR via C#字符串和文本处理
- MonkeyRecorder
- WebRTC技术调研
- ETL过程
- Intellij IDEA的下载和使用(针对学生的免费使用计划)
- epoll c++封装
- CISCO ASA 5505 经典配置案例
- 快速切题 sgu115. Calendar 模拟 难度:0
- ns3 模拟无线网络通信
- CentOS6.5下安装Zabbix
- poj2373 Dividing the Path
热门文章
- Hession集成Spring + maven依赖通讯comm项目 + 解决@ResponseBody中文乱码
- Hive中Join的原理和机制
- httpClient连接超时设置
- JDK10都发布了,nio你了解多少?
- 关于overfit的随笔
- nginx常用配置系列-静态资源处理
- 【转】js 好的程序设计,应该什么时候使用 try catch 呢?
- maven入门 (二)_私服安装与上传下载
- What is the best way to handle Invalid CSRF token found in the request when session times out in Spring security
- 判断系统是64位还是32位的bat方法