广播 (Broadcast)
广播 :在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。我们拿广播电台来做个比方。我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特定的频率来发送他们的内容,而我们用户只需要将频率调成和广播电台的一样就可以收听他们的内容了。Android中的广播机制就和这个差不多的道理,Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。
从实现原理看上,Android中的广播使用了观察者模式,基于消息的发布/订阅事件模型。因此,从实现的角度来看,Android中的广播将广播的发送者和接受者极大程度上解耦,使得系统能够方便集成,更易扩展。具体实现流程要点粗略概括如下:
1.广播接收者BroadcastReceiver通过Binder机制向AMS(Activity Manager Service)进行注册;
2.广播发送者通过binder机制向AMS发送广播;
3.AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中;
4.消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法。
现在我们就来实现一个简单的广播程序。Android提供了两种注册广播接受者的形式,分别是在程序中动态注册和在xml中指定。他们之间的区别就是作用的范围不同,程序动态注册的接收者只在程序运行过程中有效,而在xml注册的接收者不管你的程序有没有启动有会起作用。首先介绍在程序中动态注册的方式。
动态注册方式:
public class MainActivity extends Activity {public static final String BROADCAST_ACTION = "com.example.corn";private BroadcastReceiver mBroadcastReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mBroadcastReceiver = new MyBroadcastReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(BROADCAST_ACTION);registerReceiver(mBroadcastReceiver, intentFilter);}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(mBroadcastReceiver);}class MyBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if(null!=intent)Toast.makeText(context, "广播接收到:", Toast.LENGTH_SHORT).show(); }
}
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent = new Intent(); intent.setAction("com.xiazdong"); intent.putExtra("name", "xiazdong"); MainActivity .this.sendBroadcast(intent); }}
public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if(null!=intent){String name = intent.getExtras().getString("name"); Toast.makeText(context, "广播接收到:"+name, Toast.LENGTH_SHORT).show(); }}
}
AndroidManiFest.xml 的 <application>中添加
<receiver android:name=".MyReceiver"> <intent-filter android:priority="1000"> <!-- 设置最高优先级 --> <action android:name="com.xiazdong"/> </intent-filter> </receiver>
下载地址:http://download.csdn.net/detail/dickyqie/9562667
广播 (Broadcast)相关推荐
- B08_NumPy 广播(Broadcast)
NumPy 广播(Broadcast) 广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数组 a 和 b ...
- Android中的广播Broadcast详解
今天来看一下Android中的广播机制,我们知道广播Broadcast是Android中的四大组件之一,可见他的重要性了,当然它的用途也很大的,比如一些系统的广播:电量低.开机.锁屏等一些操作都会发送 ...
- Android 广播(Broadcast)
Android 广播Broadcast 1.小声嘀咕 2.广播机制简介 3.接收系统广播 3.1动态注册 3.2静态注册 4.发送自定义广播 4.1标准广播 4.2有序广播 5.使用本地广播 1.小声 ...
- 无线广播(Broadcast)
无线广播(Broadcast) Description A broadcaster wants to set up a radio broadcast transmitter in an area. ...
- 网络层:单播unicast 组播multicast 广播broadcast
当前的网络中有三种通讯模式:单播.广播.组播(多播),其中的组播出现时间最晚但同时具备单播和广播的优点,最具有发展前景. 一.单播unicast: 主机之间"一对一"的通讯模式,网 ...
- NumPy 广播(Broadcast)与pandas基础知识
文章目录 NumPy 广播(Broadcast) 控制遍历顺序 修改数组中元素的值 使用外部循环 广播迭代 Numpy 数组操作 修改数组形状 umpy.ndarray.flat umpy.ndarr ...
- 【Tsinghua】无线广播(broadcast)
一个BFS. 无线广播(broadcast) 描述 某广播公司要在一个地区架设无线广播发射装置.该地区共有n个小镇,每个小镇都要安装一台发射机并播放各自的节目. 不过,该公司只获得了FM104.2和F ...
- 品茗论道说广播(Broadcast内部机制讲解)(上)
品茗论道说广播(Broadcast内部机制讲解)(上) 侯 亮 1 概述 我们在编写Android程序时,常常会用到广播(Broadcast)机制.从易用性的角度来说,使用广播是非常简单的.不过,这个 ...
- PA7题解报告——无线广播(Broadcast)
数据结构与算法实验2020夏第二批(中国石油大学) PA7题解报告--无线广播(Broadcast) 目录 题目描述 题目分析 编码实现 一.题目描述 1. 描述 某广播公司要在一个地区架设无线广播发 ...
- 无线广播(Broadcast)【1】
无线广播(Broadcast) https://dsa.cs.tsinghua.edu.cn/oj/course.shtml?courseid=59 描述 某广播公司要在一个地区架设无线广播发射装置. ...
最新文章
- matlab求微分方程的系数,如何利用matlab求解矩阵系数的二阶微分方程
- 协议森林03 IP接力赛 (IP, ARP, RIP和BGP协议)
- 取消tableView上面多出来20个像素
- es java match_ES multi_match 和match查询
- mysql increment by 2_关于mysql auto-increment
- 网页禁止复制的chrome插件办法
- Android Studio Button背景颜色无法修改
- Java 算法 能量项链
- C#,COM口,接收,发送数据
- flink入门案例之WordCount
- java小游戏程序的编写
- 人体姿态识别研究综述(详细归纳!)(转载)
- springboot整合redis做缓存
- Parallel Data Augmentation for Formality Style Transfer翻译
- 用C语言打印一个等腰三角形
- 【前端】性能优化 - WebP
- Linux vim/vi下backspace(退格键)出现^? 或^H
- Carla+ROS1联合仿真环境搭建
- Android10读写权限
- CListCtrl控件使用
热门文章
- 安东尼奥·维瓦尔第——巴洛克音乐的奇葩
- mysql rollback.pl_设置_smu_debug_mode实现指定session级别使用特定回滚段
- 使用Apisix打造家庭NAS网关,免公网IP访问
- PHP网站流量统计--[pv,uv,ip及$_SERVER]说明
- OSChina 周三乱弹 —— 我就是太阳拳的传承者,光之魔法师
- python 面试题 博客园_常见的python面试问题1
- 【ffmpeg】——批量合并视频
- 025-2018-1011 re模块
- 恒定源扩散matlab,matlab限定源扩散问题
- Linux修改主机名