浅谈BroadcastReceiver
在安卓开发中,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相关推荐
- 浅谈Android保护技术__代码混淆
浅谈Android保护技术__代码混淆 浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读 ...
- Android 系统(104)---浅谈ANR及log分析ANR
浅谈ANR及log分析ANR 一:什么是ANR ANR:Application Not Responding,即应用无响应 二:ANR的类型 ANR一般有三种类型: 1:KeyDispatchTime ...
- 浅谈Google认证失败项分析
https://www.cnblogs.com/houser0323/p/14002924.html 标签:Google认证.GMS认证.XTS失败项分析.Android.cts 作者:秋城 http ...
- 浅谈MySQL存储引擎-InnoDBMyISAM
浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...
- 【大话设计模式】——浅谈设计模式基础
初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...
- 学校计算机机房好处,浅谈学校计算机机房维护
浅谈学校计算机机房维护 现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...
- java 中的单元测试_浅谈Java 中的单元测试
单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...
- mybatis与php,浅谈mybatis中的#和$的区别
浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...
- 浅谈GCC预编译头技术
浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...
最新文章
- 群聊:项目级的错误处理
- php var_dump()函数的详解
- 无法访问xxx指向的web服务器,请检查网络设置
- Linux安装技巧--安装Uuntu与windows8/10共存
- 【pytorch】pytorch-yolov3拍照并保存,进行检测后遍历所有图片并显示图片
- Raspberry Pi, UPNP(二), Scala
- 理想化的DevOps团队里只需要有Dev就够了?
- 对损失函数的总结(持续更新)
- 全国计算机基础知识考试题型,盘点 | 全国计算机等级考试一般考哪些内容?
- 当前页面跳转网页,新打开和在本页面打开
- glide首次加载图片时,出现图片变形,重复一下就正常
- Windows 7如何限制运行特定的应用程序(转载)
- 《Python游戏趣味编程》 第3章 美丽的圆圈画
- 区块链数字合约,如何将下放所有权?
- wpf image控件循环显示图片 以达到动画效果 问题及解决方案
- 电气工程及其自动化计算机配置,电气工程及其自动化
- Edraw Max(亿图图示)新手福音:教你思维导图的简单画法!
- 微信小程序实现自动定位
- pentaho mysql_pentaho bi server 配置MySQL数据库
- 给定一个字符串,去除整个字符串中重复的字符