Android学习笔记八:用Broadcast Receiver跨进程(跨app)通信
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7515194.html
在前面介绍四大组件的时候提到了可以对外部事件进行过滤的Broadcast Receiver,这里就对它的用法作进一步的探讨。
一:Broadcast Receiver的使用
主要有以下三个流程:定义接收器,在其中定义接收到广播后的响应行为——注册接收器,配置可以接收到什么广播——在其他地方发送广播。
1)定义接收器:继承BroadcastReceiver定义子类
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//定义接收到广播后的操作
}
}
2)在AndroidManifest.xml中注册接收器,通过intent-filter配置其action
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="com.example.broadcasttest.MY_BROADCAST" />
</intent-filter>
</receiver>
3)在其他地方,通过intent来发送广播
Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST"); //指明action类型
sendBroadcast(intent);
二:广播的响应链与优先级
通过intent来发送广播时,是以action来匹配广播接收器的。如果,有多个广播接收器,其action一样,会如何呢?这就是广播的链式响应。
当多个接收器接收广播的action相同时,则以它们在AndroidManifest.xml中注册的先后顺序依次接受、响应广播。
1)那么,这个过程可控吗?
当然,我们可以在AndroidManifest.xml中注册接收器时,为其指定响应优先级,这样,广播的响应就会根据优先级的高低而决定其响应的顺序了。
2)响应链条可以终止吗?
可以,我们可以在某一环接收器的 onReceive() 方法中,通过 abortBroadcast(); 来终止这个广播往下传递。通常,这个会搭配优先级来使用,达到清晰的链条控制的目的。
三:动态注册广播接收器
上面我们提到的在AndroidManifest.xml中注册是静态注册,静态注册的特点是:在AndroidManifest.xml中注册的接收器对于android系统全局可见,并且随着硬件设备的开启而开启,一直保持开启、监听状态。
如果,我们需要定义一种随着app运行而启动、随着app退出而停止的广播接收器,则需要用动态创建、动态注册的方式。
1)在程序的某个actvity中,以内部类的方式定义广播接收器
public class MainActivity extends AppCompatActivity {
class LocalReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//定义响应
}
}
}
2)在activity的其他方法中(一般为onCreate())创建intent-filter,为其添加action类型;然后把内部创建的接收器实例以及intent-filter实例作为参数,通过LocalBroadcastManager.registerReceiver(localReceiver, intentFilter)动态注册
intentFilter = new IntentFilter(); //创建intent-filter
intentFilter.addAction("com.example.localbroadcast.LOCAL_BROADCAST"); //添加action类型
localReceiver = new LocalReceiver(); //创建内部广播接收器实例
localBroadcastManager = localBroadcastManager.getInstance(this); //获取系统本地广播接收器管理类实例
localBroadcastManager.registerReceiver(localReceiver, intentFilter); //注册广播接收器
3)在该app的其他地方,发送广播
Intent intent = new Intent("com.example.localbroadcast.LOCAL_BROADCAST");
localBroadcastManager.sendBroadcast(intent); //注意:此处是通过localBroadcastManager来发送广播的
Android学习笔记八:用Broadcast Receiver跨进程(跨app)通信的更多相关文章
- android学习笔记八——SeekBar
SeekBar——拖动条 拖动条(SeekBar)组件与ProgressBar水平形式的显示进度条类似,不过其最大的区别在于,拖动条可以由用户自己进行手工的调节,例如当用户需要调整播放器音量或者电影的 ...
- 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...
- 【转】 Pro Android学习笔记(八八):了解Handler(2):什么是Handler
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 之前我们有一篇很好的博文<Andro ...
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(七八):服务(3):远程服务:AIDL文件
目录(?)[-] 在AIDL中定义服务接口 根据AIDL文件自动生成接口代码 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.n ...
- 【转】Pro Android学习笔记(十):了解Intent(上)
目录(?)[-] Intent基本含义 系统的Intent Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Servic ...
- 【转】 Pro Android学习笔记(七五):HTTP服务(9):DownloadManager
目录(?)[-] 小例子 保存在哪里下载文件信息设置和读取 查看下载状态和取消下载 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csd ...
- 【转】Pro Android学习笔记(十二):了解Intent(下)
解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...
- udacity android 学习笔记: lesson 4 part b
udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...
随机推荐
- 疑犯追踪第一季/全集Person Of Interest迅雷下载
本季Person of Interest Season 1 第一季(2011)看点:如今,<疑犯追踪>正在纽约热拍,在11月1日的片场,刚刚完成了一场爆炸的戏.另外,<探索者传说第一 ...
- 教你摆脱低级程序猿 项目中cocopads的安装使用
小农今天聊聊一款作为iOS开发者必备的第三方管理软件.希望程序猿朋友们看到小农的这篇文章后.可以真正的学会怎样灵活管理你项目中的第三方. (一)CocoaPods是什么? 首先我们来认识一下这款第三方 ...
- Java命令学习系列(七)——javap
javap是jdk自带的一个工具,可以对代码反编译,也可以查看java编译器生成的字节码. 一般情况下,很少有人使用javap对class文件进行反编译,因为有很多成熟的反编译工具可以使用,比如jad ...
- 局部响应归一化(Local Response Normalization,LRN)
版权声明:本文为博主原创文章,欢迎转载,注明地址. https://blog.csdn.net/program_developer/article/details/79430119 一.LRN技术介 ...
- 基于多租户的云计算Overlay网络
一 . 为什么需要Vxlan 1. vlan的数量限制 4096个vlan远不能满足大规模云计算数据中心的需求 2. 物理网络基础设施的限制 基于IP子网的区域划分限制了需要二层网络连通性的应用负载的 ...
- Eclipse自定义的透视图如何删除掉?
- go语言之进阶篇正则表达式
正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具.虽然正则表达式比纯粹的文本匹配效率低,但是它却更灵活.按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出几乎任何你想要得到的字符 ...
- STM32启动文件深度解析
STM32启动过程全面解析,包括启动过程的介绍.启动代码的陈列以及深入解析.相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方式有了比较大的变化.ARM7/ARM9 ...
- 在bat中执行sql,并配置windows计划任务,并隐藏命令窗口 (转)
1.创建一个sql文件,test.sql: INSERT INTO TR_HK_RC_TEMPERATURE2 (HWINSTANCEID, KPIITEMID, BRANCHID, COLLECTT ...
- 深挖android low memory killer
对于PC来说,内存是至关重要.如果某个程序发生了内存泄漏,那么一般情况下系统就会将其进程Kill掉.Linux中使用一种名称为OOM(Out Of Memory,内存不足)的机制来完成这个任务,该机制 ...