BroadcastReceiver 广播机制详解
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.xml的application中注册,代码如下:
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 广播机制详解相关推荐
- Numpy的广播机制详解(broadcasting)
Numpy的广播机制详解(broadcasting) 广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数 ...
- Android 广播机制详解
一.广播的简介 首先,当我们一听到广播这个词时.就可以想到小学是教室的广播.不错Android中的广播机制与我们生活中的广播是有异曲同工之妙的.Android中的发送广播也就像广播室播广播,可以让很多 ...
- android系统(63)---Jobscheduler运行机制详解
android之Jobscheduler运行机制详解 如果想在将来达到一定条件下执行某项任务时,可以在一个实现了JobService的子类的onStartJob方法中执行这项任务,使用JobInfo的 ...
- Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(二)
文章大纲 引言 一.DirectFragment 1.当选中DirectoryFragment中RecyclerView的Item时 2.选中DirectoryFragment中RecyclerVie ...
- Android设备扫描机制详解
Android设备扫描机制详解 本文基于Android pie,对Android的设备扫描机制做一个全面的解析,由于本人掌握的知识有限,如有讲错的地方还请大家指出来. Android提供了一套扫描机制 ...
- 学习QT之信号槽机制详解
学习QT之信号槽机制详解 一.Qt信号槽机制 概念:信号槽是Qt框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如:按钮检测到自己被点击了一下,它就会发出一个信号(sig ...
- PHP autoload机制详解
PHP autoload机制详解 转载自 jeakccc PHP autoload机制详解 (1) autoload机制概述 在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个 ...
- 模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配
先从纯文本搜索讲起,这是最基本也是最重要的. 从这篇开始,以及接下来连续几篇文章,都会介绍搜索的基础功能.注意,这几篇文章中谈论的都是基本的.正常的搜索功能,暂时不考虑Bug等因素. 在很多软件(例如 ...
- Java类加载机制详解【java面试题】
Java类加载机制详解[java面试题] (1)问题分析: Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数 ...
最新文章
- python loading_MXNet Python Data Loading API
- 使用时间超级长的充电宝是啥样的?
- macOS zip 打包加密和 unzip 解压
- 为什么要用MyBatis-JDBC 连接数据库
- Linux基础命令---get获取ftp文件
- (八)boost库之异常处理
- Ubuntu下安装SSH服务
- Linux删除乱码文件
- freecodecamp_freeCodeCamp论坛的未来
- 绿茶软件测试自学,抖音7号心理测试在哪 7号心理测试小程序绿茶答案
- android反编译工具 ApkDec-Release-0.1
- RocketMQ Message hasn‘t been sent. Caused by No route info of this topic, Pr
- 人工智能、机器学习以及深度学习之间的联系是什么?
- Android MVP+Retrofit(封装)+RxJava实例
- java 判断两个时间相差的天数
- MySQL所有常用语法大全
- 通过Keytool 生成 Android 签名文件
- html代码在线获取,在线客服系统html代码的获取与生成方式 - 快商通
- cdr添加节点快捷键_cdr x6快捷键大全 cdr x6(coreldraw x6)快捷键汇总
- 量化交易策略五_PEG策略
热门文章
- 微信公众号关注用户的信息拉取
- apk提取加密素材_从apk包中提取unity资源
- python安装lap_一个python脚本解决安装mq的依赖问题
- java用户界面项目_结对项目(带图型用户界面)Java实现【柴政-陈起廷】
- ROS rqt、rviz
- Java反射 field
- (二叉树的动态创建与bfs)树的层次遍历
- php防止跨域提交,PHP防止跨域提交表单的简单示例
- openglshader实现虚拟场景_虚拟演播室设计原则
- pythonocc 扩展数据_如何在pythonOCC中使用样条函数?