前面我们了解了什么是广播接收者与广播接收者的创建,这一次我们要接着继续去了解广播接收者的相关知识,这些知识包括广播接收者的注册、自定义广播与广播的类型。

当我们学习完广播接收者之后,该如何才能让它起到作用呢?还有广播接收者是用来接收广播的?那这些接收到的广播可以自己定义吗?广播有分类吗?

这一连串的问题,让我们是不是有点头大?接下来,就带大家一起来解开这些疑惑。

第1点 自定义广播

Android系统中自定义了很多类型的广播,当系统提供的广播不能满足实际需求时,可以自定义广播,同时需要编写对应的广播接收者。

接下来通过一个图例来演示自定义广播的发送与接收过程,如下图这样。

由上图我们可以看到,当自定义广播发送消息时,会将消息存储到公共消息区中,而公共消息区中如果存在对应的广播接收者,则会及时接收这条信息。广播的这种机制可以处理程序中信息的传递功能。

第2点 广播的类型

Android系统中提供了两种广播类型,分别是有序广播和无序广播,开发者可根据需求为程序设置不同的广播类型,接下来针对这两种广播类型进行介绍。

1.无序广播

无序广播是完全异步执行的,发送广播时,所有监听这个广播的广播接收器都会接收到此广播消息,但接收和执行的顺序不确定。

无序广播的效率比较高,但无法被拦截,工作流程如下图这样。

由上图可知,当发送一条广播时,所有的广播接收者都会接收。

2.有序广播

有序广播是按照广播接收者声明的优先级别被依次接收,发送广播时,只会有一个广播接收者能够接收此消息,当在此广播接收者中逻辑执行完毕之后,广播才会继续传递。

相比无序广播,有序广播的广播效率较低,但此类型是有先后顺序的,并可被拦截,工作流程如下图这样。

由上图可知,当有序广播发送消息时,优先级最高的广播接收者最先接收,优先级最低的最后接收。如果优先级最高的广播接收者将广播终止,那么广播将不再向后传递。

第3点 广播接收者的注册

如果想要接收到一个广播消息,则需要在程序中注册接受该广播的广播接收者,广播接收者的注册有两种方式,分别为动态注册和静态注册。接下来,针对这两种注册方式进行详细的讲解。

1.动态注册

由于动态注册是在Activity中通过代码注册广播接收者,所以在MainActivity中动态注册广播接收者MyBroadcastReceiver的代码如下方这样。

上述代码中,第9行代码创建了广播接收者实例,第12~13行代码实例化过滤器,并通过addAction()方法设置要过滤的action。

第14行代码通过registerReceiver()方法注册广播接收者,该方法中的第1个参数receiver表示广播接收者,第2个参数intentFilter表示实例化的过滤器。

第16~20行代码重写了onDestroy()方法,在该方法中通过unregisterReceiver()方法注销广播接收者MyBroadcastReceiver。

需要注意的是,动态注册的广播接收者是否被注销依赖于注册广播的组件,例如在Activity中注册了广播接收者,当Activity销毁时,广播接收者也随之被注销。

2.静态注册

静态注册是在清单文件中通过配置广播接收者完成注册的。

通过第二种方式创建完广播接收者之后,Android Studio会自动在AndroidManifest.xml文件中进行静态注册创建的广播接收者,静态注册广播接收者的代码如下面这样。

根据上述代码可知,在标签中添加了一个标签,该标签中的name属性值是要注册的广播接收者,属性enabled的值为true,表示广播接收者可以由系统实例化,属性exported的值为true表示可以接收当前程序之外的广播。

此种设置就是静态注册广播接收者,这种静态注册的特点是无论应用程序是否处于运行状态,广播接收者都会对程序进行监听。

需要注意的是,在Android 8.0之后,使用静态注册的广播接收者将无法接收到广播,当发送广播时,Android系统的提示信息像下方这样。

好了,今天已经将广播接收者的相关知识讲解完毕,如果大家有其他想法可以随时给出建议,今天先讲解到这里,希望这篇文章能给大家带来帮助。

android 无法接收广播_别告诉我你不认识Android中广播接收者(二)相关推荐

  1. android 环形时间显示_使用Arduino构建OLED显示屏与Android手机接口的智能手表

    背景知识视频教程 Arduino 训练营:通过项目学习​viadean.com 通过制作Arduino UNO FM收音机接收器学习Arduino I2C​viadean.com 通过构建实际应用程序 ...

  2. android easylink 搜索设备_手把手教你将数据从Android移动到iPhone步骤与技巧

    对于刚从Android转到iPhone的用户来说,最大的担忧之一就是担心丢失所有数据.由于它们是两个截然不同的操作系统,因此在两个操作系统之间传输所有有价值的数据通常会感到很复杂.幸运的是,借助免费的 ...

  3. android区块链 钱包_区块链研究实验室|从Android调用区块链智能合约

    本教程将展示如何直接从Android开发环境-Android Studio中调用智能合约. 环境要求 我们将使用Tezos区块链.为了使我们的Android java代码与现有的.部署的智能合约交互, ...

  4. java websocket广播_使用 Spring 对 Websocket 进行简单的消息广播和单播

    最近在做毕业设计,需要用到 Websocket 实现消息的推送. 在 Spring 官网上查看文档,发现 Spring 对 Websocket 的功能进行了太多扩展,引入了 STOMP 和 Broke ...

  5. android卡片层叠效果_【点播软件】哈文影视 — Android+iOS端全网追剧应用!

    Hello,大家好,我是春哥!每天记得打卡哦!感谢每一位小伙伴们的关注和支持!免责声明 大部分资源来源于网络,仅供学习和交流使用,如有侵权请联系我们删除. 每期文章末尾都会有关键词,在公众号发消息处回 ...

  6. android开发 视图联动_新版首页技术设计和实现方案(Android)

    动效设计 1.两级吸顶 CoordinatorLayout+AppBarLayout可以轻松的实现一级吸顶的功能,两级吸顶并不支持.要实现两级吸顶,可以有两种思考:一,在此基础之上再完成一次吸顶:二, ...

  7. android 坚挺通话广播_关于短信黑名单 BroadCast

    看到Android中有关Broadcast Receiver组件方面的东西,广播被分为两种不同的类型:"普通广播(Normal broadcasts)"和"有序广播(Or ...

  8. python android开发月薪_学编程,学java还是大数据、android?平均月薪23k以上告诉你方向...

    学编程,学java还是大数据.android?有不少同学在纠结中,最近有不少初学者来问到,学习大数据,学习spark,公司主要使用那些语言编写,每听到这一个问题,起码还是很不错的,证明你已经开始学习大 ...

  9. android 坚挺通话广播_安卓版本最新占比 Android 4.4很坚挺

    原标题:安卓版本最新占比 Android 4.4很坚挺 又到了每月一次的统计安卓版本占比时间.根据这份2016年12月发布的最新数据,发布于2010年5月的Android 2.2系统,其市场占比已经低 ...

最新文章

  1. 影像组学视频学习笔记(37)-机器学习模型判断脑卒中发病时间(文献报告)、Li‘s have a solution and plan.
  2. rsync+sersync实现数据文件实时同步
  3. 装修行业难互联网化?利润不合理并非本质,体制才是
  4. react 原生html 插件,纯原生JS的瀑布流插件Macy.js,前端必备插件
  5. MSTP拓扑计算过程与实验
  6. 公式编辑器里面添加空格
  7. autojs 图片查找比对
  8. 百度、腾讯和阿里内部的级别和薪资待遇是什么样的?
  9. ES7.16.2基础操作之slop查询(三)
  10. 如何在 WordPress 中嵌入 iFrame
  11. 工装夹具检具治具机械设计机构solidworks模型3d课程图纸sw
  12. 学生id号码是什么意思_学生学籍中的ID号是学籍号吗?
  13. 《黎明时分的诗》王家新
  14. 苹果耳机可以用在安卓手机上吗_安卓手机连接Airpods也可以有弹窗了,可以放心入手华强北的airpids啦...
  15. 计算机网络-IP和子网掩码及网络划分
  16. 做自媒体进行文章查重的工具哪个好?操作方便快捷吗?
  17. 使用python进行数据分析(二)
  18. 码云,git使用 教程
  19. Linux ethtool 命令
  20. A002-186-2612-曾泽宇

热门文章

  1. js获取前后几天或者前后几个月的日期
  2. 【iOS】Socket/TCP 通信 发送 NSString 字符串格式数据
  3. 顺序结构,判断结构 if,switch
  4. iOS-ARC_Xcode检测循环引用
  5. 用python操作mysql数据库(之“更新”操作)
  6. 【云和恩墨】一次 truncate 核心表衍生的安全管理思考
  7. RHEL5+PXE+DHCP+Apache+Kickstart安装RHCE5.1 i386实验室环境
  8. 使用alterMIME实现添加message footer功能
  9. CSLA .NET概述
  10. swift3.0UIAlertController使用方法