转载请注明原文地址: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)通信的更多相关文章

  1. android学习笔记八——SeekBar

    SeekBar——拖动条 拖动条(SeekBar)组件与ProgressBar水平形式的显示进度条类似,不过其最大的区别在于,拖动条可以由用户自己进行手工的调节,例如当用户需要调整播放器音量或者电影的 ...

  2. 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...

  3. 【转】 Pro Android学习笔记(八八):了解Handler(2):什么是Handler

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 之前我们有一篇很好的博文<Andro ...

  4. 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...

  5. 【转】 Pro Android学习笔记(七八):服务(3):远程服务:AIDL文件

    目录(?)[-] 在AIDL中定义服务接口 根据AIDL文件自动生成接口代码 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.n ...

  6. 【转】Pro Android学习笔记(十):了解Intent(上)

    目录(?)[-] Intent基本含义 系统的Intent Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Servic ...

  7. 【转】 Pro Android学习笔记(七五):HTTP服务(9):DownloadManager

    目录(?)[-] 小例子 保存在哪里下载文件信息设置和读取 查看下载状态和取消下载 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csd ...

  8. 【转】Pro Android学习笔记(十二):了解Intent(下)

    解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键 ...

  9. udacity android 学习笔记: lesson 4 part b

    udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

随机推荐

  1. SharePoint 2016 安装 Cumulative Update for Service Bus 1.0 (KB2799752)报错

    前言 SharePoint 服务器场安装workflow manager 1.0的时候,报下面的错误,搜了很多博客都没有解决.然后,灵机一动,下载了一个英文版的累计更新包,安装成功了. SharePo ...

  2. 防止Memcached的DDOS攻击另外一个思路

    3月3日,国家互联网应急中心通报了一条消息 关于利用memcached服务器实施反射DDoS攻击的情况通报 通告了 memcached 服务器漏洞被黑客利用的情况,笔者的一台服务器也存在漏洞,因此将漏 ...

  3. Dropout原理解析

    1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象.在训练神经网络的时候经常会遇到过拟合的问题, ...

  4. [转]linux最新分区方案

    FROM : http://www.cnblogs.com/chenlulouis/archive/2009/08/27/1554983.html 我的服务器是500G.最重要的是/var分区一定要大 ...

  5. Chapter 5 -- ImmutableCollections

    Example publicstatic final ImmutableSet<String> COLOR_NAMES =ImmutableSet.of(  "red" ...

  6. Dapper,大规模分布式系统的跟踪系统

    概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了几千台服务器 ...

  7. Sum Root to Leaf Numbers leetcode java

    题目: Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a nu ...

  8. Spring Boot 集成Shiro和CAS

    Spring Boot 集成Shiro和CAS 标签: springshirocas 2016-01-17 23:03 35765人阅读 评论(22) 收藏 举报  分类: Spring(42)  版 ...

  9. MFC剪贴板通信

    1.建立一个基于对话框的应用程序,界面如下: 2.对两个按钮进行消息响应: void CChipBoardOperateDlg::OnBnClickedBtnCopycb() { // TODO: 在 ...

  10. 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

    https://zhuanlan.zhihu.com/p/25928551 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文题目便是文本分类问题,趁此机会总结下文本分类 ...