APP开发实战76-广播机制相关API重要变迁

(1)Android5.0/APIlevel 21开始粘滞广播和有序粘滞广播过期,以后不再建议使用;

(2)静态注册的广播接收器即使app已经退出,主要有相应的广播发出,依然可以接收到,但此种描述自Android3.1开始有可能不再成立。

主要原因如下:

Android 3.1开始系统在Intent与广播相关的flag增加了参数,分别是

FLAG_INCLUDE_STOPPED_PACKAGES:包含已经停止的包(停止:即包所在的进程已经退出)

FLAG_EXCLUDE_STOPPED_PACKAGES:不包含已经停止的包

自Android3.1开始,系统本身则增加了对所有app当前是否处于运行状态的跟踪。在发送广播时,不管是什么广播类型,系统默认直接增加了值为FLAG_EXCLUDE_STOPPED_PACKAGES的flag,导致即使是静态注册的广播接收器,对于其所在进程已经退出的app,同样无法接收到广播。

(详情参加Android官方文档:

http://developer.android.com/about/versions/android-3.1.html#launchcontrols)

对于系统广播,由于是系统内部直接发出,无法更改此intent flag值,因此,Android3.1开始对于静态注册的接收系统广播的BroadcastReceiver,如果App进程已经退出,将不能接收到广播。

但是对于自定义的广播,可以通过复写此flag为FLAG_INCLUDE_STOPPED_PACKAGES,使得静态注册的BroadcastReceiver,即使所在App进程已经退出,也能能接收到广播,并会启动应用进程,但此时的BroadcastReceiver是重新新建的。

在Android3.1以前,不少App可能通过静态注册方式监听各种系统广播,以此进行一些业务上的处理(如即时App已经退出,仍然能接收到,可以启动service等..),Android3.1后,静态注册接受广播方式的改变,将直接导致此类方案不再可行。

通过将Service与App本身设置成不同的进程已经成为实现此类需求的可行替代方案。

(转自; http://www.cnblogs.com/lwbqqyumidi/p/4168017.html)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 诸多无奈,最近在改一个项目的bug的时候,脑子老是一片空白,可能是最近脑子不够用,总之,好多东西忘了,阅读一些别人...
    狗子王1948阅读 12,284评论 6 53
  • 前言 本来想写一下广播的,发现查阅后有整理的不错的,只好转载图个简便,日后好复习转载:http://www.cnb...
    提升即效率阅读 5,219评论 0 10
  • 广播接收器 是Android的四大组件之一,可见广播在Android中的重要性; 1. 什么是广播? 广播(Bro...
    Lost_Robot阅读 5,998评论 2 10
  • 本文转载自http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1....
    Ernest_Chang阅读 3,996评论 0 3
  • 1.广播的分类 (1)按照发送的方式分类 标准广播是一种异步的方式来进行传播的,广播发出去之后,所有的广播接收者几...
    曹丰斌阅读 34,260评论 0 22

友情链接更多精彩内容