关键词:
参考技术ABroadcast (广播)是一种广泛运用的应用程序之间传输信息的机制,而 BroadcastReceiver (广播接收器)则是用于接收来自系统和应用的广播对并对其进行响应的组件,Android中我们要发送的广播内容是一个 Intent ,这个 Intent 中可以携带我们要传送的数据
创建一个广播接收器非常简单,只需要继承 BroadcastReceiver ,并重写 onReceive() 即可
BroadcastReceiver 也是四大组件之一,所以我们也需要对 BroadcastReceiver 进行注册,不同于其他四大组件, BroadcastReceiver 有两种注册方式,分别是 静态注册 和 动态注册
静态注册
当我们的应用首次启动的时候,系统会自动实例化我们静态注册的 BroadcastReceiver ,然后将这个 BroadcastReceiver 注册到系统中,系统接收到广播之后,就会做出相应的判断,调用 onReceive() 方法。通过这种方式注册的广播,即使我们的应用被销毁,依然能收到广播。 这里要注意的是,我们的应用一定要被启动过 ,如果没有被启动可能就无法接收到广播,可以参考文章 Android应用在未启动的情况下无法收到指定广播的问题总结
正是因为静态注册耗电、占内存、不受程序生命周期影响,所以Google在Android 8.0上禁止大部分广播的静态注册,可以参考官文文档 Android 8.0 功能和 API
动态注册
通过动态注册的广播, BroadcastReceiver 的生命周期跟随Activity的生命周期
注意: 要在 Activity 的 onPause() 中 unRegeisterReceiver() ,否则会引起内存泄漏。比较推荐 onResume() 中去注册广播,在 onPause() 中去注销广播。因为在内存资源比较吃紧的情况下,可能我们的 Activity 执行完 onPause() 之后就被销毁,这时候 Activity 的 onStop() 和 onDestory() 方法就不会执行了
BroadcastReceiver注册完之后,这个 BroadcastReceiver 就能够接收响应的广播,下面我们来说说如何发送一条广播
普通广播(Normal Broadcast)
普通广播完全是异步的,通过 context.sendBroadcast() 方法发送,消息传递效率比较高,但所有接收器的执行顺序不确定。缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止广播的传播
有序广播(Ordered Broadcast)
有序广播是通过 context.sendOrderedBroadcast() 方法发送,所有的广播者按照优先级依次执行,广播接收器的优先级通过 receiver 的 intent-filter 中的 android:priority 属性来设置,数值越大优先级越高。当广播接收器接收到广播后,可以使用 setResult() 方法把结果传递给下一个接收者,通过 getResult() 方法获取上一个接收者传递过来的结果,并可以通过 abortBroadcast() 方法丢弃该广播,使该广播不再传递给下一个接收者
粘性广播(Sticky Broadcast)
粘性广播通过 context.sendStickBroadcast() 方法来发送,用此方法发送的广播会一直滞留,当有匹配此广播的接收器被注册后,该广播接收器就会收到此广播。使用此广播时,需要获得 BROADCAST_STICKY 权限
由于在Android5.0 & API 21中已经失效,所以不建议使用。
本地广播(Local Broadcast)
前三种广播都是全局广播,所有应用都可以接收到,这样就带来安全隐患,而本地广播只在进程内传播,可以起到保护数据安全的作用
其实,本地广播的使用与其十分类似,之前的步骤均是一样的,调用者不同而已,本地广播调用的是 LocalBroadcastManager 相关方法,全局广播调用的是 Context 的相关方法,其方法名都是一样的
这里需要说一下, 使用本地广播并没有静态注册的方法 ,因为静态注册主要是为了让程序在未启动的情况下也能收到广播,而发动本地广播的时候,我们的程序已经是启动了,所以,自然是没有静态注册这个方法
Android中内置了多个系统广播,当使用系统广播时,只需要在注册广播接收者时定义相关的 action 即可,并不需要手动发送广播,当系统有相关操作(如开机、网络状态变化、拍照等等)时会自动进行系统广播
Android系统广播 action 如下:
本文介绍了 BroadcastReceiver 的两种注册方式(动态注册、静态注册),四种发送方式(普通广播、有序广播、粘性广播(API21废弃)、本地广播),以及系统广播的用法。几乎涵盖了 BoradcastReceiver 在应用开发过程中的所有知识,对于BroadcastReceiver原理感兴趣的可以继续看 BroadcastReceiver详解(原理篇)
[基础漏洞篇]webpack前端源码泄露详解
rk3568平台开发系列讲解(驱动基础篇)makefile详解
vue.js基础知识篇:组件详解
第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性。我们把组件代码按照template、style、script的拆分方式,放置到对应的.vue文件中。1.注册Vue.js的组件注册分为全局注册和局部注册。全局注册使用Vu... 查看详情
vue.js基础知识篇:表单校验详解
目录网盘第12章:表单校验1.npm安装vue-validator$npminstallvue-validator代码示例:varVue=require("vue");varVueValidator=require("vue-validator");Vue.use(VueValidator);2.直接使用script标签引入vue.js要下载vue-validator,那么进入cdn的地址http 查看详情
rk3568平台开发系列讲解(驱动基础篇)mmap系统调用详解
elasticsearch检索分类深入详解—基础篇
转载自服务号【铭毅天下】Elasticsearch中当我们设置Mapping(分词器、字段类型)完毕后,就可以按照设定的方式导入数据。有了数据后,我们就需要对数据进行检索操作。根据实际开发需要,往往我们需要支持包含但不限于以下... 查看详情
android基础篇监听home键(代码片段)
一、Home键监听工具类importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.content.IntentFilter;importcom.blankj.utilcode.util.LogUtils;publicclassHom 查看详情
java基础之变量详解
前言上一篇我们讲的是java基础之常量及数据类型,包括定义,代码,演示和总结。这一篇接着给大家带来,java基础之变量和数据类型,变量到后面大家工作的时候也都会频繁用到,所以大家看得时候一定要实操一下,本篇和上... 查看详情
nginx详解五:nginx基础篇之http请求
HTTP请求请求百度看一下:curlhttp://www.baidu.com这样的格式不能直观的查看和分析,加个-v来展现出每次请求的具体的信息内容,然后把返回的信息重定向到一个空设备上面,便于查看curl-vhttp://www.baidu.com>/dev/null 查看详情
100天精通python丨基础知识篇——04变量和基础数据类型详解
《100天精通Python专栏-快速入门到黑科技》是由CSDN内容合伙人丨全站排名Top4的硬核博主不吃西红柿倾力打造,专栏分为基础知识篇和黑科技应用篇。基础知识篇以理论知识为主,旨在帮助没有语言基础的小伙伴,学习我整理成体... 查看详情
基础篇:4.1)规范化:3d工程图纸出图步骤详解
本章目的:按照工程图出图步骤,顺利制造规范的工程图。 2.工程出图步骤以solidworks为例:0)打开绘制的3d零件图,进行3d图的GB基础设置;1)3d零件图(装配体图)转为工程图,进行工程图GB基础设置;2)选定合适图幅和比例... 查看详情
[基础漏洞篇]webpack前端源码泄露详解(代码片段)
🍬博主介绍 👨🎓博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~✨主攻领域:【渗透领域】【数据通信】【通讯安全】【web安全】【面试分析】🎉点赞➕评论➕收藏==养成习... 查看详情
android四大组件系列篇
文章目录1、Activity2、Service3、BroadcastReceiver4、ContentProvider1、ActivityActivity(一)Activity间的跳转Activity(二)Activity间的传值Activity(三)生命周期详解2、ServiceService(一& 查看详情
vue2.0深入源码分析基础篇methods属性详解(代码片段)
用法 methods中定义了Vue实例的方法,官网是这样介绍的:例如::<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><scriptsrc="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>< 查看详情
vue2.0深入源码分析基础篇computed属性详解(代码片段)
用法模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护,比如:<divid="example">message.split(‘‘).reverse().join(‘‘)</div><script>varapp=newVue(el:‘#example‘,data:... 查看详情
android的四大基础----service篇
android中有四大组件:Activity,Service,BroadcastReceiver和ContentProvider。其中Service级别上跟Activity其实差不多,只是Service只能在后台运行,适合那些不需要界面的操作,像是播放音乐或者监听动作等,因为它的名... 查看详情
android基础到进阶面试题之broadcastreceiver使用+实例(代码片段)
BroadcastReceiver是什么 BroadcastReceiver是Android四大组件之一,是一种广泛运用在应用程序之间传输信息的机制,通过发送Intent来传送我们的数据。BroadcastReceiver使用场景应用内多个不同组件之间的消息通信。跨应用... 查看详情
详解autosar:autosra软件架构(理论篇—2)
目录1、应用软件层2、运行时环境3、基础软件层3.1、服务层3.2、ECU抽象层 查看详情