android中的BroadCastReceiver
BroadCastReceiver组件本质是一种全局的监听器,用于监听系统全局的广播消息。由于BroadCastReceiver是一种全局的监听器,因此他可以非常方便的实现系统之间不同组件之间的通信。
BroadCastReceiver简介:
BroadCastReceiver用于接收程序(包括用户开发的程序和系统内建的程序)所发出的Broadcast Intent,程序启动BroadCastReceiver需要两步:
1、创建需要启动的BroadCastReceiver的Intent
2、调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定的BroadCastReceiver
当应用程序发出一个Broadcast Intent之后,所有匹配该Intent的BroadcastReceiver都可能被启动。
BroadCastReceiver本质是一个监听器,因此只要重写BroadCastReceiver的onReceive(Context context, Intent intent)方法即可。
一旦实现了BroadCastReceiver,接下来就应该指定该BroadCastReceiver能匹配的Intent,此时有两种方法:
1、使用代码进行指定,调用BroadCastReceiver的Context的Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter)方法指定,如:
IntentFilter filter = new IntentFilte("android.provider.Telephony.SMS_RECEIVED");
IncomingSMSReceiver receiver = new IncomingSMSReceiver();
registerReceiver(receiver, filter);
2、AndroidManifest.xml清单文件中进行配置:
<receiver android:name=".IncomingSMSReceiver">
<intent-filter >
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
每次系统Broadcast事件发生后,系统就会创建对应的BroadcastReceiver的实例,并自动触发他的onReceive()方法,onReceive()方法执行完后,BroadcastReceiver的实例就会被销毁。
如果BroadcastReceiver的onReceive()方法不能在10秒内执行完成,Android会认为该程序无响应。所以不要在BroadcastReceiver的onReceive()方法中执行一些耗时的操作,否则会弹出ANR的对话框。
如果确实需要根据Broadcast来完成一项比较耗时的操作,则可以考虑通过Intent启动一个Service来完成操作。不应该使用新的线程去完成操作,因为BroadcastReceiver本身的生命周期很短,可能出现的情况是子线程可能还没有结束,BroadcastReceiver就已经退出了。如果BroadcastReceiver所在的进程结束,虽然该进程内还有用户启动的新线程,但是由于该进程内不包含任何活动组件,因此系统会在内存紧张时优先结束该进程,这样就可能导致BroadcastReceiver启动的子线程不能执行完成。
android中的BroadCastReceiver的更多相关文章
- Android 中的BroadCastReceiver
BroadCastReceiver 简介 (末尾有源码) BroadCastReceiver 源码位于: framework/base/core/java/android.content.Broadc ...
- (转)Android 中LocalBroadcastManager的使用方式
发表于2个月前(2014-11-03 22:05) 阅读(37) | 评论(0) 0人收藏此文章, 我要收藏 赞0 1月10日 #长沙# OSC 源创会第32期开始报名 摘要 android中广播 ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...
- Android中BroadcastReceiver广播
BroadCastReceiver 简介 广播接收者( BroadcastReceiver )用于接收广播 Intent ,广播 Intent 的发送是通过调用 Context.sendBroadca ...
- android 在基类activity中注册BroadcastReceiver,子activity类实现响应
android app 一般都会定义自己的BaseActivity, 如果各子Activity都需要接收广播但对广播的处理又不同时,可以考虑在BaseActivity中注册BroadcastRecei ...
- Android中BroadcastReceiver的使用
1.Android中广播分为静态注册和动态注册 2.下面是一个简单静态注册的例子 创建一个继承BroadcastReceiver的子类 public class DeviceBootReceiver ...
- Android中后台的劳动者“服务”
前言 作为四大组件之一的Service,想必不少开发者都是了解的,那具体熟悉吗?是不是对Service中的每个知识点是否了解,它与Activity的关系又是什么样的,我们所理解的后台服务跟Servic ...
- android 中调用接口发送短信
android中可以通过两种方式发送短信 第一:调用系统短信接口直接发送短信:主要代码如下: //直接调用短信接口发短信 SmsManager smsManager = SmsManager.getD ...
- 转:在Android中使用AlarmManager
原地址http://blog.csdn.net/maosidiaoxian/article/details/21776697 AlarmManager是Android中的一种系统级别的提醒服务,它会为 ...
随机推荐
- flex:1 内容不要撑开
.content { flex: 1; overflow: hidden: }
- docker镜像仓库
搭建私有镜像仓库 Docker Hub作为Docker默认官方公共镜像,如果想自己搭建私有镜像仓库,官方也提供registry镜像,使得搭建私有仓库非常简单. 下载registry镜像并启动 [roo ...
- Nginx之Keepalived
目录 Nginx之Keepalived 1. Keepalived 高可用基本概述 1.1 什么是高可用 1.2 高可用通常使用什么软件? 1.3 keepalived是如何实现高可用的? 1.4 那 ...
- python中map的排序以及取出map中取最大最小值
map排序: 1.按key排序: items=dict.items() items.sort() sorted(dict.items(),key=lambda x:x[0],reverse=False ...
- php操作redis常用方法代码示例
redis 的连接 描述:实例连接到一个Redis. 参数:host: string,port: int 返回值:BOOL 成功返回:TRUE;失败返回:FALSE $redis = new Red ...
- firefox下jquery ajax 返回 [object XMLDocument]处理
在firefox下使用jquery ajax处理 返回json类型的时候,ajax执行成功返回结果为 [object XMLDocument]. 处理办法:在getWriter.write():前面加 ...
- mysql添加中文数据失败
日志信息: INFO 2015-01-13 10:44:36,078 org.springframework.beans.factory.xml.XmlBeanDefinitionReader: Lo ...
- websocket 中使用Service层的方法
创建公共Utils 类 ApplicationContextRegister @Component @Lazy(false) public class ApplicationContextRegist ...
- while循环语句基础
while循环语句基础 一while循环语句介绍 循环语句命令常用于重复执行一条指令或一组指令,直到条件不再满足时停止, Shell脚本语言的循环语句常见的有while, until, for及s ...
- POJ 3414 Pots (dfs,这个代码好长啊QAQ)
Description You are given two pots, having the volume of A and B liters respectively. The following ...