Android广播机制Broadcast详解
一、先介绍基本使用方法
private class DataRefreshRecieve extends BroadcastReceiver{@Override public void onReceive(Context context, Intent intent) {if ("com.yiyo.stb".equals(intent.getAction())){stbDataRefresh(); dissDialog(); }} }
第二步:.注册receiver
在 AndroidManifest.xml 中注册
< receiver android:name = ".MyBroadcastReceiver" > < intent-filter android:priority = "1000" > < action android:name = "com.yiyo.stb" /> </ intent-filter > </ receiver >
代码中注册
IntentFilter intentFilter = new IntentFilter( "com.yiyo.stb" );
registerReceiver( mBatteryInfoReceiver , intentFilter);
第三步:发送广播
Intent intent=new Intent(); intent.setAction("com.yiyo.stb"); sendBroadcast(intent);
第四步:
实现onReceive方法(在方法里做相应操作)
private class DataRefreshRecieve extends BroadcastReceiver{@Override public void onReceive(Context context, Intent intent) {if ("com.yiyo.stb".equals(intent.getAction())){stbDataRefresh(); dissDialog(); }} }
二、Broadcast简介
在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。
生命周期:
三、注意事项
1、生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报错 。每次广播到来时 , 会重新创建 BroadcastReceiver 对象 , 并且调用 onReceive() 方法 , 执行完以后 , 该对象即被销毁 . 当 onReceive() 方法在 10 秒内没有执行完毕, Android 会认为该程序无响应 . 所以在 BroadcastReceiver 里不能做一些比较耗时的操作 , 否侧会弹出 ANR(Application No Response) 的对话框
2、这里不能使用子线程来解决 , 因为 BroadcastReceiver 的生命周期很短 , 子线程可能还没有结束BroadcastReceiver 就先结束了 .BroadcastReceiver 一旦结束 , 此时 BroadcastReceiver 的 所在进程很容易在系统需要内存时被优先杀死 , 因为它属于空进程 ( 没有任何活动组件的进程 ). 如果它的宿主进程被杀死 , 那么正在工作的子线程也会被杀死 . 所以采用子线程来解决是不可靠的 .
3、如果需要完成一项比较耗时的工作 , 应该通过发送 Intent 给 Service, 由 Service 来完成
四、广播的类型
1、普通广播 (Normal broadcasts):发送一个广播,所以监听该广播的广播接收者都可以监听到该广播。
2、有序广播 (Ordered broadcasts):按照接收者的优先级顺序接收广播 , 优先级别在 intent-filter 中的 priority 中声明 ,-1000 到 1000 之间 , 值越大 , 优先级越高 . 可以终止广播意图的继续传播 . 接收者可以篡改内容 .
五、两种广播发送和接收
1、普通广播不再介绍
2、有序广播(Ordered Broadcast)发送和接收
- sendOrderedBroadcast(intent, null);
this.sendOrderedBroadcast(new Intent("android.provier.zhongnan.broadcast"), "xzq.zhongnan.test");
代码中与上述例子最大的差别在于MainActivity中发送广播的代码: this.sendOrderedBroadcast(new Intent(
"android.provier.zhongnan.broadcast"), "xzq.zhongnan.test")增加了自定义的一个权限。
AndroidManifest文件中配置自定义的权限:
<permission android:protectionLevel="normal" android:name="xzq.zhongnan.test"></permission>
- 中断广播,不再往下发放abortBroadcast();
3、粘性sendStickyBroadcast
- 它将发出的广播保存起来,一旦发现有人注册这条广播,则立即能接收到
发这个广播需要权限<uses-permission android:name="android.permission.BROADCAST_STICKY" />
去掉是用这个方法removeStickyBroadcast(intent); 但别忘了在执行这个方法的应用里面 AndroidManifest.xml 同样要加上面的权限; mContext.sendStickyBroadcast(intent);
六、中断广播(有序广播中可操作)
- abortBroadcast()可中断广播,后面就不会收到广播,sendOrderedBroadcast()中若第三个参数赋值ResultReceiver, 还是会收到广播,始终都是最后一个接收到
七、广播权限
- a、发送端要求接收端的权限(要求接收者必须有权限)
接收端必须持有发送端的权限才可以接收这个广播
<permission/>声明权限---在发送端声明这个权限
<uses-permission/>使用权限---在接收端使用这个权限才可以收到广播b、接收端要求发送端的权限
在<receiver/>标签中指定android:permission=""权限,发送端必须有这个权限,接收端才会接收它的广播;若无权限,接收端不接收广播
Android广播机制Broadcast详解相关推荐
- Android 广播机制---BroadCast
在android下,要想接受广播信息,那么这个广播接收器就得我们自己来实现了,我们可以继承BroadcastReceiver,就可以有一个广播接受器了.有个接受器还不够,我们还得重写Broadcast ...
- Android Loader机制全面详解及源码浅析
原文出处:csdn@工匠若水,http://blog.csdn.net/yanbober/article/details/48861457 一.概述 在Android中任何耗时的操作都不能放在UI主线 ...
- Android广播机制:Broadcast
转载:Android总结篇系列:Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广 ...
- Android 广播机制详解
一.广播的简介 首先,当我们一听到广播这个词时.就可以想到小学是教室的广播.不错Android中的广播机制与我们生活中的广播是有异曲同工之妙的.Android中的发送广播也就像广播室播广播,可以让很多 ...
- Android NFC卡实例详解
Android NFC卡实例详解 公司最近在做一个NFC卡片的工程,经过几天的时间,终于写了一个Demo出来,在此记录下在此过程中遇到的问题.由于之前本人是做iOS的,Android写起来并不是那么的 ...
- Android应用坐标系统全面详解
Android应用坐标系统全面详解 原文链接:CSDN@工匠若水,http://blog.csdn.net/yanbober/article/details/50419117 1. 背景 去年有很多人 ...
- Android Gradle 自定义Task详解二:进阶
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...
- Android Gradle 自定义Task 详解
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76408024 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...
- android ------- 开发者的 RxJava 详解
在正文开始之前的最后,放上 GitHub 链接和引入依赖的 gradle 代码: Github: https://github.com/ReactiveX/RxJava https://githu ...
- Android JNI作用及其详解
Android JNI作用及其详解 Java Native Interface (JNI)标准是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 J ...
最新文章
- 《算法竞赛入门经典》习题——Chapter 3
- mysql压缩表语句_MYSQL静态表、动态表、压缩表总结
- 吴恩达团队发起X射线AI诊断竞赛,这家中国公司登上了榜首
- Grafana 使用教程 --- 开源的度量分析与可视化套件
- vlan跨交换机 udp广播_网络交换VLAN基础入门
- 进行DosBox的下载与配置
- 直播声音代码html,如何实现在直播中播放音频文件
- unbuntu 安装jdk
- 一分钟了解什么是代理ip和api接口
- SAP总账科目增强写入客商(BAPI导入)
- 牛牛的闹钟--网易2019实习生招聘编程题
- 超越“虚拟的美丽”——云计算实践再分析
- 当你同事工作出色时,如何得体地告知他上司
- 解决PCB焊盘堵,PCB通孔的方法(个人总结)
- PHP关于实现腾讯云直播的推流和拉流
- 嵌入式c程序易错点(转自http://blog.csdn.net/zhzht19861011/article/details/45508029)
- 不要再这样做shopee虾皮跨境电商,不然有苦说不出
- 数学建模——非线性规划
- yolo-v2 翻译
- 图形学知识基础:向量