快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

Android中广播消息机制的实践是怎样的

这期内容当中小编将会给大家带来有关Android中广播消息机制的实践是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

岳塘网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联建站2013年开创至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站

Android系统有一套广播消息机制,方便进行每个应用程序之间的消息通知。而且广播接受者作为Android四大组件之一,经常被使用到。我也接触到广播消息机制,因此有必要对自己所学的知识梳理整理下。

0x01 广播分类
  • 标准广播 
    标准广播是一种完全异步执行的广播。这种广播是一种一对多的广播,效率比较高。当广播被发出之后,所有的广播接受者几乎会在同一时间收到消息。

  • 有序广播 
    有序广播是一种同步执行的广播。这种广播顾名思义是有接受顺序的广播。当广播被发出之后,只有一个广播接受者会收到消息。因此,该广播是一对一的广播。

0x02 注册广播
  • 动态注册 
    通过Java代码注册。广播接受者可以自由地对自己感兴趣的广播进行注册,并内部处理响应广播的逻辑。这种方式虽然灵活,当也有一定的局限性。它要求应用程序在运行时才能进行。

  • 静态注册 
    在AndroidManifest.xml中注册。这种方式可以在应用程序还没有启动就注册接受广播了。

动态注册经典代码Android中广播消息机制的实践是怎样的
静态注册经典代码 

在AndroidManifest文件Application节点内添加如下代码:Android中广播消息机制的实践是怎样的
该广播接受者名为MyBroadcastReceiver。其有两个属性:enabled属性表示是否启用这个广播接受者;exported属性表示是否允许这个广播接受者接受本程序以外的广播。

0x03 静态注册广播与动态注册广播的区别
  • 静态注册即使App退出,仍然能接收到广播

  • 动态注册时,当Activity退出,就接收不到广播了

  • 但是静态注册即使App退出,仍然能接收到广播这种说法自Android 3.1开始有可能不再成立。

说明: 
Android 3.1开始系统在Intent与广播相关的flag增加了参数: 
1) FLAG_INCLUDE_STOPPED_PACKAGES:包含已经停止的包(停止:即包所在的进程已经退出) 
2) FLAG_EXCLUDE_STOPPED_PACKAGES:不包含已经停止的包 
自Android3.1开始,系统本身增加了对所有App当前是否处于运行状态的跟踪。在发送广播时,不管是什么广播类型,系统默认直接增加了值为FLAG_EXCLUDE_STOPPED_PACKAGES的flag,导致即使是静态注册的广播接收器,对于其所在进程已经退出的App,同样无法接收到广播。 
因此对于系统广播,由于是系统内部直接发出的,无法更改此intent的flag值。因此,从3.1开始对于静态注册的接收系统广播的BroadcastReceiver,如果App进程已经退出,将不能接收到广播。 
但是对于自定义的广播,可以通过覆写此flag为FLAG_INCLUDE_STOPPED_PACKAGES,使得静态注册的BroadcastReceiver,即使所在App进程已经退出,也能接收到广播,并会启动应用进程,但此时的BroadcastReceiver是新建的。 
实现代码为:

Android中广播消息机制的实践是怎样的
在3.1以前,不少App可能通过静态注册方式监听各种系统广播,以此进行一些业务上的处理(如即使App已经退出,仍然能接收到,可以启动service等..)。 

3.1后,静态注册接受广播方式的改变,将直接导致此类方案不再可行。于是,通过将Service与App本身设置成不同的进程已经成为实现此类需求的可行替代方案。

0x04 发送广播
  • 发送标准广播

Android中广播消息机制的实践是怎样的

  • 发送有序广播

Android中广播消息机制的实践是怎样的
需要在AndroidManifest文件中通过设定广播接受者的intent-filter节点的priority属性来确定接受广播的顺序。 

如果想把广播截断,可以在onReceive()中调用abortBoradcast()

0x05 使用本地广播

为了让广播只在应用程序中传递,这就需要LocalBroadcastManager大显身手。我们通过代码来熟悉。

Android中广播消息机制的实践是怎样的
0x06 广播的最佳实践

广播可以应用于强制下线或者被挤下线的逻辑操作

上述就是小编为大家分享的Android中广播消息机制的实践是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


新闻名称:Android中广播消息机制的实践是怎样的
本文URL:http://6mz.cn/article/gepsgp.html

其他资讯