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语言中宏定义(#define)时do{}while(0)的价值(转)
C语言中宏定义(#define)时do{}while(0)的价值 最近在新公司的代码中发现到处用到do{...}while(0),google了一下,发现Stack Overflow上早有很多讨论,总 ...
- 初识nginx+tomcat
百度百科说: Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯 ...
- 2、vector的实现
看侯捷老师的<STL源码剖析>有一段时间了,打算自己整理一下思路,试着实现一下.主要目的有两个:1.巩固自己对源码的理解,让自己更加深刻的体会其中各种机制的奥妙.别人的知识 ...
- Toast添加动画
WindowManger wm =(WindowManger)context.getSystemService(Context.WINDOW_SERVICE); View view = Toast.m ...
- android的数据存储方式
数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...
- openstack安装记录(一)环境准备
参考文献: 官方文档 http://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/index.html 最小实例: 控制节点: 1 处理器, 4 ...
- tornado.web.Application类配置及使用
Application configuration classtornado.web.Application(handlers=None, default_host='', transforms=No ...
- 记录一下自己用到的python logging
最近想把自己零零散散写的代码嵌成一个应用,要考虑到各方面的debug,把logging看了一下,把用到的记下来. 将日志打印到屏幕 import logging logging.debug(u'调试' ...
- python 源代码分析之调试设置
首先在官方下载源代码,我下载的是最新版本3.4.3版本:https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz 解压后的目录如下(借用网上的目 ...
- nginx请求体读取(二)
2,丢弃请求体 一个模块想要主动的丢弃客户端发过的请求体,可以调用nginx核心提供的ngx_http_discard_request_body()接口,主动丢弃的原因可能有很多种,如模块的业务逻辑压 ...