zoukankan      html  css  js  c++  java
  • Android 8.0对隐式广播的进一步限制

    项目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 则为显式广播,可以通过搜索代码进一步核实下,看看基本写法是否与上述逻辑一致。
     
     
    可见,源码中写法与上述分析一致。
     

  • 相关阅读:
    solr 最佳实践
    DNS 域名解析过程
    mac 下 virtualbox 配置全网通
    搜索引擎使用技巧
    三叉搜索树
    双数组trie树的基本构造及简单优化
    基于回归-马尔科夫模型的客运量预测
    solr 常用命令
    PHP yield 分析,以及协程的实现,超详细版(上)
    C语言,简单计算器【上】
  • 原文地址:https://www.cnblogs.com/lwbqqyumidi/p/10151914.html
Copyright © 2011-2022 走看看