一、广播机制概述

通常情况下在学校的每个教室都会装有一个喇叭,这些喇叭是接入到学校广播室的。如果有重要通知,会发送一条广播来告知全校师生。为了便于发送和接收系统级别的消息通知,Android系统也引入了一套类似广播的消息机制。

Android中的广播(Broadcast)机制用于进程/线程间通信,该机制使用了观察者模式,观察者模式是一种软件设计模式,该模式是基于消息的发布/订阅事件模型,该模型中的消息发布者是广播机制中的广播发送者,消息订阅者是广播机制中的广播接收者。

上述图中的广播机制的实现流程具体如下:

1、广播接收者是通过Binder机制在AMS(Activity Manager Service)中进行注册的 (在8.2小节会讲解广播接收者的注册)。

2、广播发送者是通过Binder机制向AMS发送广播。

3、AMS查找符合相应条件(IntentFilter/Permission)的广播接收者 (BroadcastReceiver),将广播发送到相应的消息循环队列中。

4、执行消息循环时获取到此广播,会回调广播接收者(BroadcastReceiver)中的 onReceive()方法并在该方法中进行相关处理。

二、广播接收者

Android系统中内置了很多广播,例如手机开机完成、电池电量不足时都会发送一条广播。

为了监听来自系统或者应用程序的广播事件,Android系统提供了BroadcastReceiver(广播接收者)组件。 当Android系统产生一个广播事件时,可以有多个对应的广播接收者接收并进行处理。

1、广播接收者的创建

1、通过在应用程序的包中创建一个类继承BroadcastReceiver并重写onReceive()方法来实现

2、通过选中应用程序中的包,右击选择【New】→【Other】→【Broadcast Receiver】选项来创建

public class MyBroadcast extends BroadcastReceiver {@Override// 当广播接收者接收广播成功,此方法会自动回调执行,在该方法中实现广播接收者的相关操作public void onReceive(Context context, Intent intent) {}
}

注意:创建完广播接收者之后还需要对广播接收者进行注册才可以接收广播。

2、广播接收者的注册

(1)静态注册

AndroidManifest.xml清单文件中

<receiverandroid:name=".utils.MyBroadcast"android:enabled="true"android:exported="true"><intent-filter><action>cn.com.hello</action> </intent-filter>
</receiver>

注意:静态注册广播,在小于Android8.0的设备上,只要设备处于开启状态,广播接收者就能接收到广播。Android8.0之后不支持静态注册方式。

(1)动态注册

<receiverandroid:name=".utils.MyBroadcast"android:enabled="true"android:exported="true">
</receiver>
public class BroadcastReceiverActivity extends AppCompatActivity {private MyBroadcast myBroadcast;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_broadcast_receiver);// 创建广播接收者对象myBroadcast = new MyBroadcast();String action = "cn.com.hello"// 创建意图过滤器IntentFilter intentFilter = new IntentFilter();// 设置要过滤的广播intentFilter.addAction(action );// 注册广播接收者registerReceiver(myBroadcast,intentFilter);}// 广播接收者是稀缺资源,使用结束要注销,可以在app销毁的阶段进行注销@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(myBroadcast);}
}

注意:动态注册的广播接收者是否被注销依赖于注册广播的组件,当组件销毁时,广播接收者也随之被注销。

三、广播的类型

1、无序广播

无序广播是完全异步执行,发送广播时所有监听这个广播的广播接收者都会接收到此消息,但接收的顺序不确定。

发送广播:

btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {// 发送一次广播Intent intent = new Intent();intent.putExtra("info","hello,who are you ?");// 设置广播的action,相当于广播的名称String action = "cn.com.hello"intent.setAction(action);// 发送广播,广播会发送到信息中心,由信息中心负责找到这个广播的订阅者并将广播的意图传过去// 无序广播sendBroadcast(intent);}
});

接收广播:

(1)MyBroadcast工具类文件:

public class MyBroadcast extends BroadcastReceiver {@Override// 当广播接收者接收广播成功,此方法会自动回调执行public void onReceive(Context context, Intent intent) {String msg = intent.getStringExtra("info");Log.v("msg","接收到了广播信息!");}
}

(2)Activity文件

myBroadcast = new MyBroadcast();
String action = "cn.com.hello"
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(action);
registerReceiver(myBroadcast,intentFilter);

2、有序广播

按照接收者的优先级接收,只有一个广播接收者能接收消息,在此广播接收者中逻辑执行完毕后,才会继续传递。

发送广播:

ntent intent = new Intent();
intent.putExtra("info","hello,who are you ?");
String action = "cn.com.hello"
intent.setAction(action);
// 有序广播
sendOrderedBroadcast(intent,null);

接收广播:

(1)MyBroadcast工具类文件:

public class MyBroadcast extends BroadcastReceiver {@Override// 当广播接收者接收广播成功,此方法会自动回调执行public void onReceive(Context context, Intent intent) {String msg = intent.getStringExtra("info");Log.v("msg","接收到了广播信息!");// 截断广播的发送,之后的广播接收者就接收不到广播了abortBroadcast();}
}

(2)Activity文件

myBroadcast = new MyBroadcast();
String action = "cn.com.hello"
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(action);
// 设置优先级
intentFilter.setPriority(8);
// 注册广播接收者
registerReceiver(myBroadcast,intentFilter);

注意:数值越大,优先级越高。如果两个广播接收者的优先级相同,则先注册的广播接收者优先级高。

Android四大组件之broadcast广播使用整理笔记相关推荐

  1. Android四大组件之一 --Broadcast(广播通信)

    一,Broadcast简介 Broad cast 广播是广泛应用在应用程序之间传输信息的机制,而Broadcast Receiver是对发送出来的广播进行过滤接收并响应的一类组件 二,Broadcas ...

  2. android 广播解绑,Android四大组件之BroadCast

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Android四大组件之BroadCast 一.广播概述 Android应用可以从Android系统和其他Android ...

  3. Android四大组件之——Broadcast学习总结

    1.Broadcast概念 是一个全局的监听器,属于Android四大组件之一.Broadcast(广播)是一种广泛运用的在应用程序(APP)之间传输信息的机制.而BroadcastReceiver( ...

  4. android四大组件之四-BroadCast实现原理分析

    前言: 一开始的目标是解决各种各样的ANR问题的,但是我们知道,ANR总体上分有四种类型,这四种ANR类型有三种是和四大组件相对应的,所以,如果想了解ANR发生的根因,对安卓四大组件的实现原理必须要懂 ...

  5. Android 四大组件 -- BroadcastReceiver(广播)

    Android开发的四大组件分别是: 活动(activity),用于表现功能; 服务(service),后台运行服务,不提供界面呈现: 广播接受者(BroadcastReceive),勇于接收广播: ...

  6. Android四大组件之BroadCast(续)

    1.哪一个方法可以发送广播? activity.sendbroadcast or context.sentbroadcast or service.sendbroadcast 2.创建广播接受程序必须 ...

  7. Android四大组件之BroadCastReceiver

    1. 基本概念 在Android 中,Broadcast 是一种广泛运用的在应用程序之间传输信息的机制.而BroadcastReceiver 是对发送出来的Broadcast 进行过滤接受并响应的一类 ...

  8. Android四大组件系列7 Broadcast广播机制(上)

    一 概述 广播 (Broadcast) 机制用于进程或线程间通信,广播分为广播发送和广播接收两个过程,其中广播接收者 BroadcastReceiver 是 Android 四大组件之一.Broadc ...

  9. android 广播的权限,Android四大组件详解之BroadcastReceiver广播接收者

    Android四大组件详解---BroadcastReceicer广播接收者 广播有两个角色,一个是广播发送者,另一个是广播接收者. 广播按照类型分为两种,一种是全局广播,另一种是本地广播 全局广播: ...

最新文章

  1. ii第六单元 文本处理工具
  2. jQuery监控页面所有ajax请求的方法
  3. C# 解决串口接收数据不完整
  4. activiti异步执行_对基于消息队列的Activiti异步执行器进行基准测试
  5. python背景怎么自定义铃声_Python 上课铃声的定时播放(具有较强的自我管理能力.jpg)...
  6. 助AI研究社群发出内建18种预先训练模型工具
  7. IntelliJ IDEA、Kotlin 背后公司 JetBrains 在俄罗斯停服
  8. spring中的context:include-filter和context:exclude-filter的区别
  9. 逻辑卷管理(LVM)
  10. 免费小说网站源码 主题XSnov WordPress主题
  11. 计算机辅助翻译技术工具,计算机辅助翻译技术对译者的影响
  12. JSP页面只显示源代码不显示网页内容
  13. 蓝桥杯—大胖子走迷宫—广搜
  14. NB-IoT窄带物联网的优势特点
  15. linux系统安装在u盘
  16. selenium - 操作 DropDown 下拉表 (以微博注册为例)
  17. 数据库课程总结(ORACLE)
  18. maven 3.6.3 下载与详细配置图文教程(基于win10系统)
  19. 2018-9-1-win2d-画出好看的图形
  20. PEANUT-WF模块开发-Peanut.Common

热门文章

  1. 乐视盒子服务器有响应,乐视盒子卡顿这样做快速搞定,这几个方法你要学会
  2. 在谷歌浏览器中执行 JavaScript(二)
  3. 云从科技与中国工商银行达成战略合作 共建金融科技创新平台
  4. IE11下载文件报错400
  5. html定位 知乎,从零开始:python实现爬取知乎热榜(随缘更新完善)
  6. 三款实用且颜值高的国内wordpress主题,免费下载
  7. 基于GEE平台土地类型分类
  8. python第3周(python学习题集)
  9. 10年计算机速度慢加固态硬盘行不行,电脑越来越慢?你的ssd固态硬盘分区弄好了吗...
  10. android 摇一摇动画效果,Android实现微信摇一摇功能