Android应用被强制停止后无法接受广播解决方案
在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应用被强制停止后无法接受广播解决方案相关推荐
- android吸附菜单,Android RecycleView实现滑动停止后自动吸附效果
Android RecycleView实现滑动停止后自动吸附效果 发布时间:2020-11-02 16:01:42 来源:亿速云 阅读:124 作者:Leah 这篇文章将为大家详细讲解有关Androi ...
- android强制停止运行,如何在android中单击强制停止时运行服务
单击强制停止时我遇到了运行服务的问题,当我重启我的手机时应该调用服务.我已经按照一些例子但我无法完成任务.任何人都可以指导我完成任务. 需要: 1.Service should run when fo ...
- 如何在Android设备上关闭/停止正在运行的应用程序
Android apps don't actually stop running when you return to the Home screen or switch to another app ...
- Android活动,控件,碎片,广播,数据库小总结
系统架构与开发环境搭建 3月2日Android Activities代码练习 3月5日 Intent的应用与传值 3月9日 1:显式Intent与隐式Intent的区别 显式Inten ...
- android 应用自动重启,Android:如何在“强制关闭”后自动重启应用程序?
Android:如何在"强制关闭"后自动重启应用程序? 在Android应用程序中,如果我们没有得到正确的例外,我们通常会收到"强制关闭"错误. 如果强行关闭, ...
- android设置--》应用程序详细信息--》强制停止
我的samsung9100每天早上电池都会耗尽.经常打开网易云阅读,墨迹天气之类的应用.怀疑是点击返回并没真正退出,就到设置-->应用管理-->正在运行查看.果然这些应用还在,选择停止后过 ...
- android 服务自动运行怎么办,怎么解决安卓软件服务停止后又自启?
原标题:怎么解决安卓软件服务停止后又自启? 昨天说到安卓软件是如何做到开机启动的?怎么解决?当然流氓的软件并不单单这种,还有更流氓的我明明清理过电视了,关闭程序了结果一会之后这个软件的服务又开起了,后 ...
- Android设置中“强行停止”详解
Android设置中"强行停止"详解 最近工作上遇到了广播接受不到的问题,查看了<Android 开发艺术探索>一书中关于广播的发送和接受的章节(P356-P362). ...
- Android面试宝典2022-(停止更新,请看面试专栏)
Android面试宝典2020-持续更新 一.Java基础 1.java基本数据类型和引用类型 2.object equals和==的区别 equals和hashcode的关系? 3.static关键 ...
最新文章
- 近段时间佛我就偶尔无
- Eclipse闪退/打不开/无法启动/一闪而过
- Page.OnPreInit 方法
- 图解Http学习第三章
- 2013蓝桥杯C++B:翻硬币(找规律和getline())
- 依据经纬度解析商圈scala实现
- NodeJs之http
- 从开发到发布一款基于Vue2x的图片预览插件
- Java class文件反编译工具推荐以及Eclipse中查看/调试Jar包中的代码
- Python升级包不成功,试试豆瓣资源吧
- 阿里云CentOS7服务器搭建邮件服务器,端口:465
- mysql 数据入库去重_MySQL中去重 distinct 的用法 ,数据库去重distinct
- BP神经网络算法原理
- SpringCloud 第十二章 Gateway新一代网关
- springboot2集成sharding-jdbc分库分表
- 最小生成树(Minimum Spanning Tree)
- 【Android】 Firebase登录、FCM、Google Play支付、adbrix、ONEStore、Galaxy Store、Google Install Referrer
- 【网上教学】实现线上签到和收批作业的方法
- css3怎么实现筛子的效果??transform得常用属性??
- stderr/stdout用法
热门文章
- 学习 Message(11): 测试 TWMMouse 结构相关的鼠标消息
- Google地球查看香港地形
- Something about WMI
- 亚马逊RDS使用的第三方扩展有漏洞,可导致内部凭据遭泄露
- IT巨头埃森哲遭 LockBit 勒索攻击,黑客威胁泄露数据
- 开源 CMS Drupal 修复 XSS 和开放重定向漏洞
- iOS学习——Socket
- 【248天】跃迁之路——程序员高效学习方法论探索系列(实验阶段06-2017.10.11)...
- 数学之美--关于图论引申出来的爬虫构想
- H3C SecPath F100-C 防火墙默认配置