在3.1之后,系统的PackageManager增加了对处于“stopped state”应用的管理,这个stopped和Activity生命周期中的stop状态是完全两码事,包管理器中的stopped state指的是安装后从来没有启动过或者是被用户手动强制停止的应用。这点大家可以到“设置”——>"应用程序",查看任何一个安装的应用,看看“强行停止”这个按钮是否变灰就知道了。

系统增加了2个Flag:FLAG_INCLUDE_STOPPED_PACKAGES和FLAG_EXCLUDE_STOPPED_PACKAGES ,来标识一个intent是否激活处于“stopped state”的应用。当2个Flag都不设置或者都进行设置的时候,采用的是FLAG_INCLUDE_STOPPED_PACKAGES的效果。有了上面的新机制之后,google觉得给所有的广播intent默认加上FLAG_EXCLUDE_STOPPED_PACKAGES会非常的Cooooool,能在一定程度上避免流氓软件、病毒啊干坏事,还能提高效率,就导致了RECEIVE_BOOT_COMPLETED广播如果用户没有运行过应用或者在设置中强行停止了应用,就不会接收到BOOT_COMPLETED广播。

在android3.1以后的版本中,如果程序被强制停止后应用状态会被标记为STOPPED,此时应用无法收到其他应用的广播,要等到应用再开启一次,将STOPPED去掉以后才可以。除此之外还有一个解决方法如下:

解决办法:

在广播发发送方发送广播时需要设置Intent.FLAG_INCLUDE_STOPPED_PACKAGES

示例代码:

Intent intent = new Intent();
intent.setAction("com.leeliwei.test.receiver.action.test");
if (android.os.Build.VERSION.SDK_INT >= 12) {intent.setFlags(32);//3.1以后的版本需要设置Intent.FLAG_INCLUDE_STOPPED_PACKAGES
}
sendBroadcast(intent);

参照代码再多说两句高低版本兼容问题,if判断中为什么写>=12而不是大于>= android.os.Build.VERSION_CODES.HONEYCOMB_MR1这种常量形式。答案是我的sdk兼容从2.2版本开始的,如果写成常量形式的会报编译错误,如果调高了targetVersion(开发绑定版本),虽然编译没有错误,但在低版本运行时,会因为找不到那个常量值儿报异常终止,所以建议使用数字12。同理,intent.setFlags(32)中没有直接写常量也是这个原因,Intent.FLAG_INCLUDE_STOPPED_PACKAGES是3.1版本时才有的。低版本会报错。

转载于:https://www.cnblogs.com/chenlong-50954265/p/5729497.html

Android应用被强制停止后无法接受广播解决方案相关推荐

  1. android吸附菜单,Android RecycleView实现滑动停止后自动吸附效果

    Android RecycleView实现滑动停止后自动吸附效果 发布时间:2020-11-02 16:01:42 来源:亿速云 阅读:124 作者:Leah 这篇文章将为大家详细讲解有关Androi ...

  2. android强制停止运行,如何在android中单击强制停止时运行服务

    单击强制停止时我遇到了运行服务的问题,当我重启我的手机时应该调用服务.我已经按照一些例子但我无法完成任务.任何人都可以指导我完成任务. 需要: 1.Service should run when fo ...

  3. 如何在Android设备上关闭/停止正在运行的应用程序

    Android apps don't actually stop running when you return to the Home screen or switch to another app ...

  4. Android活动,控件,碎片,广播,数据库小总结

    系统架构与开发环境搭建 3月2日Android Activities代码练习 3月5日 Intent的应用与传值 3月9日 1:显式Intent与隐式Intent的区别         显式Inten ...

  5. android 应用自动重启,Android:如何在“强制关闭”后自动重启应用程序?

    Android:如何在"强制关闭"后自动重启应用程序? 在Android应用程序中,如果我们没有得到正确的例外,我们通常会收到"强制关闭"错误. 如果强行关闭, ...

  6. android设置--》应用程序详细信息--》强制停止

    我的samsung9100每天早上电池都会耗尽.经常打开网易云阅读,墨迹天气之类的应用.怀疑是点击返回并没真正退出,就到设置-->应用管理-->正在运行查看.果然这些应用还在,选择停止后过 ...

  7. android 服务自动运行怎么办,怎么解决安卓软件服务停止后又自启?

    原标题:怎么解决安卓软件服务停止后又自启? 昨天说到安卓软件是如何做到开机启动的?怎么解决?当然流氓的软件并不单单这种,还有更流氓的我明明清理过电视了,关闭程序了结果一会之后这个软件的服务又开起了,后 ...

  8. Android设置中“强行停止”详解

    Android设置中"强行停止"详解 最近工作上遇到了广播接受不到的问题,查看了<Android 开发艺术探索>一书中关于广播的发送和接受的章节(P356-P362). ...

  9. Android面试宝典2022-(停止更新,请看面试专栏)

    Android面试宝典2020-持续更新 一.Java基础 1.java基本数据类型和引用类型 2.object equals和==的区别 equals和hashcode的关系? 3.static关键 ...

最新文章

  1. 近段时间佛我就偶尔无
  2. Eclipse闪退/打不开/无法启动/一闪而过
  3. Page.OnPreInit 方法
  4. 图解Http学习第三章
  5. 2013蓝桥杯C++B:翻硬币(找规律和getline())
  6. 依据经纬度解析商圈scala实现
  7. NodeJs之http
  8. 从开发到发布一款基于Vue2x的图片预览插件
  9. Java class文件反编译工具推荐以及Eclipse中查看/调试Jar包中的代码
  10. Python升级包不成功,试试豆瓣资源吧
  11. 阿里云CentOS7服务器搭建邮件服务器,端口:465
  12. mysql 数据入库去重_MySQL中去重 distinct 的用法 ,数据库去重distinct
  13. BP神经网络算法原理
  14. SpringCloud 第十二章 Gateway新一代网关
  15. springboot2集成sharding-jdbc分库分表
  16. 最小生成树(Minimum Spanning Tree)
  17. 【Android】 Firebase登录、FCM、Google Play支付、adbrix、ONEStore、Galaxy Store、Google Install Referrer
  18. 【网上教学】实现线上签到和收批作业的方法
  19. css3怎么实现筛子的效果??transform得常用属性??
  20. stderr/stdout用法

热门文章

  1. 学习 Message(11): 测试 TWMMouse 结构相关的鼠标消息
  2. Google地球查看香港地形
  3. Something about WMI
  4. 亚马逊RDS使用的第三方扩展有漏洞,可导致内部凭据遭泄露
  5. IT巨头埃森哲遭 LockBit 勒索攻击,黑客威胁泄露数据
  6. 开源 CMS Drupal 修复 XSS 和开放重定向漏洞
  7. iOS学习——Socket
  8. 【248天】跃迁之路——程序员高效学习方法论探索系列(实验阶段06-2017.10.11)...
  9. 数学之美--关于图论引申出来的爬虫构想
  10. H3C SecPath F100-C 防火墙默认配置