在安卓开发中,broadcast是一种APP直接传输信息的机制。它是对广播进行过滤并接受响应的一类组件。它可以运用于接收广播intent,广播intent发送通过调用sendbroadcast/sendorderedBroadcast来实现。通常一个广播intent可以被订阅此intent的多个广播接收者所接收。

比如我静态注册一个SDcardunmountedreceiver的广播代码如下:

在清单文件中声明<receiver>,需要在其中配置<intent--filter>指定接收广播的动作action

或者动态注册,在JAVA代码中注册:

两种注册的区别:代码注册也就是动态注册,它不是一个常驻的广播,也就是说他的广播是跟随着程序的生命周期,一旦代码所在进程被杀死,广播接收者就失效。而在清单文件中注册的静态广播是常驻型,在当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。在平时我们手机中,需要启动一次才能接受到广播,它才会生效。

安卓中常见的广播

监听拨打电话广播

监听系统开机的广播,监听安装和卸载程序的广播,拦截短信等。

发送自定义广播

无序广播不可以被拦截,所有接收无序广播的广播接收者在此广播被发送时均能接收此广播,并且是同时接收。无序广播使用sendbroadcast方法来发送,核心代码如下:

这个intent的action可以是自定义的动作。那么接收者也要定义发送广播的意图动作。

注意:符合某广播条件的所有广播接收者的特点:无序、无优先级、不可中断、不可传递数据。

广播时可设置接收者权限,仅当接收者含有权限才能接收。

接收者的<receiver>也可以设置发送方权限,只接收含有权限应用的广播Receiver节点属性

发送广播是,通过intent.setFlag(intent.flag_include_stopped_packeages),包含从未启动过的程序,这样的设置,可以让从未启动的接收者也收到广播。

有序广播

有序广播可以被拦截或者添加数据,优先级高的接收者可以拦截低优先级,使用abortBroadcast,添加数据:通过bundle传递。前面的接收者可以将数据通过setResultExtras(Bundle)方法存进结果对象,然后传递给下一个接收者,下一个接收者通过代码:Bundle bundle = getResultExtras(true)可以获取上一个接收者存入在结果对象中的数据。

谷歌规定的优先级是1000~~负1000,系统默认优先级是0。

粘性广播(sendstickBroadcast),号称是阴魂不散的广播,它会一直等待intent指定的事件处理完毕才会消失。他需要API的权限BROADCAST_STICKY。它不会像普通广播那样10秒钟以后就会被干掉。

注意一些细节问题:

1.广播接收者的生命周期是非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁
2.广播接收者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框
3.最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉
4.耗时的较长的工作最好放在服务中完成

浅谈BroadcastReceiver相关推荐

  1. 浅谈Android保护技术__代码混淆

    浅谈Android保护技术__代码混淆 浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读 ...

  2. Android 系统(104)---浅谈ANR及log分析ANR

    浅谈ANR及log分析ANR 一:什么是ANR ANR:Application Not Responding,即应用无响应 二:ANR的类型 ANR一般有三种类型: 1:KeyDispatchTime ...

  3. 浅谈Google认证失败项分析

    https://www.cnblogs.com/houser0323/p/14002924.html 标签:Google认证.GMS认证.XTS失败项分析.Android.cts 作者:秋城 http ...

  4. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

  5. 【大话设计模式】——浅谈设计模式基础

    初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...

  6. 学校计算机机房好处,浅谈学校计算机机房维护

    浅谈学校计算机机房维护    现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...

  7. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  8. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  9. 浅谈GCC预编译头技术

    浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...

最新文章

  1. 群聊:项目级的错误处理
  2. php var_dump()函数的详解
  3. 无法访问xxx指向的web服务器,请检查网络设置
  4. Linux安装技巧--安装Uuntu与windows8/10共存
  5. 【pytorch】pytorch-yolov3拍照并保存,进行检测后遍历所有图片并显示图片
  6. Raspberry Pi, UPNP(二), Scala
  7. 理想化的DevOps团队里只需要有Dev就够了?
  8. 对损失函数的总结(持续更新)
  9. 全国计算机基础知识考试题型,盘点 | 全国计算机等级考试一般考哪些内容?
  10. 当前页面跳转网页,新打开和在本页面打开
  11. glide首次加载图片时,出现图片变形,重复一下就正常
  12. Windows 7如何限制运行特定的应用程序(转载)
  13. 《Python游戏趣味编程》 第3章 美丽的圆圈画
  14. 区块链数字合约,如何将下放所有权?
  15. wpf image控件循环显示图片 以达到动画效果 问题及解决方案
  16. 电气工程及其自动化计算机配置,电气工程及其自动化
  17. Edraw Max(亿图图示)新手福音:教你思维导图的简单画法!
  18. 微信小程序实现自动定位
  19. pentaho mysql_pentaho bi server 配置MySQL数据库
  20. 给定一个字符串,去除整个字符串中重复的字符

热门文章

  1. nodejs async
  2. asp.net的ViewState学习
  3. 转载:frameset 使用心得
  4. 2.8 多任务学习-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  5. 3.8 神经网络解决逻辑运算问题-机器学习笔记-斯坦福吴恩达教授
  6. excel 多项式拟合数据
  7. DFTug - Getting Started(上篇)
  8. 【AI2】app inventor2离线开发环境百度网盘下载链接,安卓app图形化开发环境
  9. 【PC工具】大神级代码注释,漂亮实用的代码注释工具代码logo工具
  10. 【PC工具】PhotoScape简单绿色功能强大的照片编辑器