BroadcastReceiver浅析
1.什么是BroadcastReceiver?
本质上是属于一个监听器,但onXxxListenter只是程序级别的监听器,当程序退出时候监听器也随之关闭。而BroadcastReceiver是系统级别的监听器,只要存之匹配的intent被广播出来,BroadcastRecevier就会被激发。
2.如何使用BroadcastRecevier
原理:子类继承BroadcastReceiver,并为该子类添加intent描述,当程序发送intent的时候,intent会进行匹配搜索,当与该子类的intent描述相一致的时候,就会调用子类的onRecevie()方法
步骤一:子类继承BroadcastReceiver并重写onReceive()
public class FirstBroadcast extends BroadcastReceiver {
private static final String TAG = "FirstBroadcast";
@Override
public void onReceive(Context context, Intent intent) {
//当Broadcast被intent启动的时候调用该方法
Log.d(TAG,"The Broadcast start");
}
}
步骤二:添加intent描述(有两种方式)
<!--方法一:在AndroidManifest.xml中注册-->
<receiver android:name=".FirstBroadcast">
<intent-filter>
<!--name可以系统给的也可以是自定义的-->
<action android:name="com.chen.firstBroadcast"/>
</intent-filter>
</receiver>
//方法二:在Activity代码中编写
public class MainActivity extends AppCompatActivity {
private FirstBroadcast mFirstBroadcast; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mFirstBroadcast = new FirstBroadcast();//创建Broadcast
IntentFilter intentFilter = new IntentFilter();//创建intent描述
intentFilter.addAction("com.chen.FirstBroadcast");//将描述装入
registerReceiver(mFirstBroadcast,intentFilter);//注册到Broadcast
}
}
步骤三:利用Intent发送给Broadcast
//在MainActivity中
Intent intent1 = new Intent("com.chen.FirstBroadcast");、、刚在注册的描述
sendBroadcast(intent1);
3.有序广播和普通广播
普通广播(Normal Broadcast):可在同一时刻被所有接收者接收到,所以说缺点是:无法将数据结果传递给下一个。
sendBroadcast()发送无序广播
有序广播(Ordered Broadcast):有序广播的接收者按照之前定义的优先级依次接收Broadcast,如:A>B>C,则A先收到,然后B,最后C。
设置优先级①在AndroidManifest的<Intent-filter android:priority=数值> ②在代码的IntentFilter对象的 setPriority()取值范围是1~1000
sendOrderedBroadcast()发送有序广播。
同时,优先收到广播的接收者可以停止继续发送Broadcast:调用abortBroadcast();
优先收到广播的接收者可以通过setResultExtras(Bundle)将数据存入Broadcast,然后传送给下一个接收者,下一个接收者通过Bundle bundle = getResultExtras(true);
接收数据
4.注解
1.若BroadRecevier的onRecevie()不能再10秒内完成的话,Android会认为该程序无响应。
2.系统收到短信发出的Broadcast属于Ordered Broadcast。
5.作用
1.Service与Activity之间交互的桥梁
2.接收系统发出的Broadcast(系统发出的常用广播:http://blog.sina.com.cn/s/blog_7dbac1250101mt5h.html)
BroadcastReceiver浅析的更多相关文章
- Android AIDL浅析及异步使用
AIDL:Android Interface Definition Language,即 Android 接口定义语言. AIDL 是什么 Android 系统中的进程之间不能共享内存,因此,需要提供 ...
- Android BroadcastReceiver使用
1. 介绍 BroadcastReceiver用于接收广播事件(Intent), 是Android四大组件之一 2. 使用 2.1 实现广播接收类 实现一个广播收类继承BroadcastReceiv ...
- SQL Server on Linux 理由浅析
SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 高性能IO模型浅析
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking ...
- netty5 HTTP协议栈浅析与实践
一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...
- Jvm 内存浅析 及 GC个人学习总结
从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...
- 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...
随机推荐
- C#创建Windows服务与安装-图解
1.创建windows服务项目
- struts2 中 Session的使用简介
在Struts2里,如果需要在Action中使用到session,可以使用下面两种方式: 通过ActionContext 类中的方法getSession得到 Action实现org.apache.st ...
- php 联系电话验证(手机和固话)
$tel='要验证的联系电话'; $isMob="/^1[3-5,8]{1}[0-9]{9}$/"; $isTel="/^([0-9]{3,4}-)?[0-9]{7,8} ...
- 安装apk到虚拟的device
adb device 显示你的设备 adb install apk包
- Ice_cream's world I--hdu2120
Ice_cream's world I Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- MySQL索引背后的数据结构及最左原则
MySQL索引原理 ##索引目的索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql.如果没有索引,那么你可能 ...
- android重要的对象
Context----------------访问全局信息的api Activity Window Intent/Bundle ImageView----------onclick View----- ...
- poj 1852 Ants_贪心
题目大意:很多的蚂蚁都在长度为L(cm)的膀子上爬行,它们的速度都是1cm/s,到了棒子终端的时候,蚂蚁就会掉下去.如果在爬行途中遇到其他蚂蚁,两只蚂蚁的方向都会逆转.已知蚂蚁在棒子的最初位置坐标,但 ...
- ubuntu 命令
用mount命令加载iso到虚拟光驱 先在/media/目录下新建一个空目录作为加载iso的虚拟光驱名称: sudo mkdir /media/aaaa 再用mount挂载: sudo mount - ...
- ubuntu 下node 环境的安装
1. 安装nodejs sudo apt-get install nodejs 注意:包名是nodejs 2. 建立node软连接 #找到nodejs位置 which nodejs # /usr/bi ...