BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。

在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。

Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。

android中广播分三种类型:

第一:标准广播 (Normal broadcasts),是一种完全异步执行的广播,在广播发出之后,所有广播接收器几乎都会同一时刻接收到这条广播信息,没有先后之分。这种效率比较高,但无法被截断。代码如下:

btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent();intent.setAction("com.example.broadcast.MY_BROAD");intent.putExtra("msg", "标准广播");sendBroadcast(intent);}
});

标准广播

第二:有序广播 (Ordered broadcasts),是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够接收,但这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时的广播接收器有先后顺序,在intent-filter中设置 android:priority=''' 优先级,  优先级高的先收到广播消息。发送使用 sendOrderedBroadcast(intent, null);其中第二个参数是设置权限,在这里并不需要,所以设为空,代码如下:

1 btn.setOnClickListener(new OnClickListener() {
2     @Override
3     public void onClick(View v) {
4         Intent intent=new Intent();
5         intent.setAction("com.example.broadcast.MY_BROAD");
6         intent.putExtra("msg", "有序广播");
7         sendOrderedBroadcast(intent, null);
8     }
9 });

有序广播

第三:粘性广播  (Sticky broadcasts),字面意思是发送粘性的广播,使用这个api需要权限android.Manifest.permission.BROADCAST_STICKY,粘性广播的特点是Intent会一直保留到广播事件结束,而这种广播也没有所谓的10秒限制,10秒限制是指普通的广播如果onReceive方法执行时间太长,超过10秒的时候系统会将这个广播置为可以干掉的candidate,一旦系统资源不够的时候,就会干掉这个广播而让它不执行。发送使用 sendStickyBroadcast(intent);

使用粘性广播时必须在AndroidManifest.xml中加上android.Manifest.permission.BROADCAST_STICKY权限

代码如下:

1  btn.setOnClickListener(new OnClickListener() {
2     @Override
3     public void onClick(View v) {
4             Intent intent=new Intent();
5             intent.setAction("com.example.broadcast.MY_BROAD");
6             intent.putExtra("msg", "粘性广播");
7             sendStickyBroadcast(intent);
8     }
9 });

粘性广播

广播的接收有两种方式:动态注册与静态注册

注册时,我们应该先定义一个类继承BroadcastReceiver,并重写onReceiver()方法,每当广播接收时都会执行onReceiver()方法。

如下接收广播显示提示消息:

 1 package com.example.broadcast;
 2
 3 import android.content.BroadcastReceiver;
 4 import android.content.Context;
 5 import android.content.Intent;
 6 import android.widget.Toast;
 7
 8 public class BroadcastReceiverTest extends BroadcastReceiver{
 9
10     @Override
11     public void onReceive(Context context, Intent intent) {
12         Toast.makeText(context, "BroadcastReceiver ", Toast.LENGTH_SHORT).show();
13     }
14
15 }

继承BroadcastReceiver

动态注册 是在代码中进行注册,代码如下:

 1 package com.example.broadcast;
 2
 3 import android.os.Bundle;
 4 import android.app.Activity;
 5 import android.content.IntentFilter;
 6 import android.widget.Button;
 7
 8 public class MainActivity extends Activity {
 9     Button btn;
10     BroadcastReceiverTest receiver;
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_main);
15
16         IntentFilter intentFilter=new IntentFilter();
17         intentFilter.addAction("com.example.broadcast.MY_BROAD");
18         receiver=new BroadcastReceiverTest();
19         registerReceiver(receiver, intentFilter);
20     }
21     @Override
22     protected void onDestroy() {
23         super.onDestroy();
24         unregisterReceiver(receiver);
25     }
26 }

动态注册

静态注册 需要在AndroidManifest.xmlapplication中注册,代码如下:

1 <receiver android:name=".BroadcastReceiverTest">
2             <intent-filter >
3                 <action android:name="com.example.broadcast.MY_BROAD"/>
4             </intent-filter>
5  </receiver>

静态注册

转载于:https://www.cnblogs.com/xavier-0/p/4912773.html

BroadcastReceiver 广播机制详解相关推荐

  1. Numpy的广播机制详解(broadcasting)

    Numpy的广播机制详解(broadcasting) 广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数 ...

  2. Android 广播机制详解

    一.广播的简介 首先,当我们一听到广播这个词时.就可以想到小学是教室的广播.不错Android中的广播机制与我们生活中的广播是有异曲同工之妙的.Android中的发送广播也就像广播室播广播,可以让很多 ...

  3. android系统(63)---Jobscheduler运行机制详解

    android之Jobscheduler运行机制详解 如果想在将来达到一定条件下执行某项任务时,可以在一个实现了JobService的子类的onStartJob方法中执行这项任务,使用JobInfo的 ...

  4. Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(二)

    文章大纲 引言 一.DirectFragment 1.当选中DirectoryFragment中RecyclerView的Item时 2.选中DirectoryFragment中RecyclerVie ...

  5. Android设备扫描机制详解

    Android设备扫描机制详解 本文基于Android pie,对Android的设备扫描机制做一个全面的解析,由于本人掌握的知识有限,如有讲错的地方还请大家指出来. Android提供了一套扫描机制 ...

  6. 学习QT之信号槽机制详解

    学习QT之信号槽机制详解 一.Qt信号槽机制 概念:信号槽是Qt框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如:按钮检测到自己被点击了一下,它就会发出一个信号(sig ...

  7. PHP autoload机制详解

    PHP autoload机制详解 转载自 jeakccc PHP autoload机制详解 (1) autoload机制概述 在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个 ...

  8. 模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配

    先从纯文本搜索讲起,这是最基本也是最重要的. 从这篇开始,以及接下来连续几篇文章,都会介绍搜索的基础功能.注意,这几篇文章中谈论的都是基本的.正常的搜索功能,暂时不考虑Bug等因素. 在很多软件(例如 ...

  9. Java类加载机制详解【java面试题】

    Java类加载机制详解[java面试题] (1)问题分析: Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数 ...

最新文章

  1. python loading_MXNet Python Data Loading API
  2. 使用时间超级长的充电宝是啥样的?
  3. macOS zip 打包加密和 unzip 解压
  4. 为什么要用MyBatis-JDBC 连接数据库
  5. Linux基础命令---get获取ftp文件
  6. (八)boost库之异常处理
  7. Ubuntu下安装SSH服务
  8. Linux删除乱码文件
  9. freecodecamp_freeCodeCamp论坛的未来
  10. 绿茶软件测试自学,抖音7号心理测试在哪 7号心理测试小程序绿茶答案
  11. android反编译工具 ApkDec-Release-0.1
  12. RocketMQ Message hasn‘t been sent. Caused by No route info of this topic, Pr
  13. 人工智能、机器学习以及深度学习之间的联系是什么?
  14. Android MVP+Retrofit(封装)+RxJava实例
  15. java 判断两个时间相差的天数
  16. MySQL所有常用语法大全
  17. 通过Keytool 生成 Android 签名文件
  18. html代码在线获取,在线客服系统html代码的获取与生成方式 - 快商通
  19. cdr添加节点快捷键_cdr x6快捷键大全 cdr x6(coreldraw x6)快捷键汇总
  20. 量化交易策略五_PEG策略

热门文章

  1. 微信公众号关注用户的信息拉取
  2. apk提取加密素材_从apk包中提取unity资源
  3. python安装lap_一个python脚本解决安装mq的依赖问题
  4. java用户界面项目_结对项目(带图型用户界面)Java实现【柴政-陈起廷】
  5. ROS rqt、rviz
  6. Java反射 field
  7. (二叉树的动态创建与bfs)树的层次遍历
  8. php防止跨域提交,PHP防止跨域提交表单的简单示例
  9. openglshader实现虚拟场景_虚拟演播室设计原则
  10. pythonocc 扩展数据_如何在pythonOCC中使用样条函数?