当前位置: 首页 > web >正文

Android | 广播( Broadcast )

一、广播

I、系统广播

        由 Android 系统进行发送,通常表示系统级事件发生。 系统广播由 Intent 意图对象进行封装。该 Intent 对象中的 action 字段包含了表示事件的详细信息字符串签名。

II、自定义广播

        由 App 自身进行发送。为了通知其他 App 或本 App中的其他组件某一事件已经发生。对这类事件感兴趣的 App 或组件可以及注册该自定义广播的广播接收器。

        1、标准广播 (Normal Broadcast)

         

        2、有序广播 (Ordered Broadcast)

         

        3、本地广播 (Local Broadcast)

二、广播接收器 ( Broadcast Receiver )

        注册系统或 App 的广播事件。当事件发生时,注册了该事件的广播接收器被系统通过Intent 对象激活。

        使用广播接收器的步骤包括:

        1 子类化 BroadcastReceiver并实现onReceive()方法;

        2 通过静态或动态方式注册广播接收器

        3 注销广播接收器

        1、子类化 BroadcastReceiver

        当广播事件的 Intent 对象与该子类注册时的 intent filter匹配时,该广播接收器子类将接收 Intent 对象,并通过onReceive()方法响应广播事件。

        当 App 收到一个已注册的广播 Intent 对象时, BroadcastReceiver类中的onReceive()方法被回调。onReceive()方法默认主线程中执行,除非在注册时显式的指定该方法在其他线程执行。onReceive()方法中的代码执行时间若超过 10 秒,Android 系统将判定广播接收器被阻塞,此时系统将可能向用户提示 ANR (application not responding) 错误。

        2、注册广播接收器

        静态注册,通过 Android 配置清单文件注册广播接收器;

        动态注册,使用 Context 上下文类注册广播接收器;

        (1)静态注册

                                在AndroidManifest.xml中声明 <receiver> 标签

        android:name ,广播接收器子类的完整类名,如果该子类与配置清单文件指定的报名相同则可使用简写形式,如.AlarmReceiver;

        android:exported,该值被设为 false 时,其他 App 不可向该广播接收器发送广播;

        <intent−filter>,包含嵌套的标签用于指定该广播接收器监听的广播 Intent 对象的动作 (actions)

         对于 Android 8.0 (API level 26) 以上版本,静态注册形式注册的隐式广播 (implicit broadcasts) 的行为是无效 的。

        部分隐式广播 (ACTION_BOOT_COMPLETED、ACTION_TIMEZONE_CHANGED) 仍可通过静态注册形 式进行注册。

        (2)动态注册/上下文注册(context-registered)

通过 应用上下文 (Application Context)活动上下文 (Activity Context)   对广播进行动态注册

        应用上下文 - 在应用运行时 (前台运行及后台运行),广播接收器均能接收到注册的广播事件;

        活动上下文 - 在活动被销毁前 (onDestroy回调方法执行前),广播接收器均能接收到注册的广播事件。

        步骤:

  • 创建 IntentFilter 对象,并添加需要注册的广播Intent动作 (可以添加多个Intent动作)

  •  通过上下文对象的 registerReceiver ()方法注册所需的广播接收器

        3、注销广播接收器

unregisterReceiver ()

可节省系统资源及避免内存泄露

         在 Activity 中,根据 Activity 的生命周期对广播接收器进 行注册及注销操作。 例如仅当 Activity 可见时才需要广播接收器的话,可以在onResume()中进行注册,在onPause()中进行注销

        4、限制广播事件

        非受限的广播 (unrestricted broadcast) 可能会引起安全的问题,因为任何广播接收器均可对其进行注册。

        限制广播事件的方式:

        (1)如不需与其他 App 进行通信,在本地 App 内使用本地广播;

        (2)发送广播 Intent 对象时,通过setPackage()设置指定的应用 包名,广播事件将被限定传播给指定的 App;

        (3)强制 (enforce) 广播事件发送端或接收端的访问权限:

  • 强制发送端的权限,在sendBroadcast()方法中添加一个非空的权限参数。只有在AndroidManifest.xml文件中使用了<uses−permission>标签申请该权限    的广播接收器才能接收到该广播;
  • 强制接收端的权限,动态注册的广播接收器,在registerReceiver ()添加一个非空的权限参数;静态注册的广播接收器,在AndroidManifest.xml文件的<receiver>标签中增加android:permission属性;
http://www.xdnf.cn/news/11607.html

相关文章:

  • 智慧养老照护:科技赋能,让老年人享受更美好的晚年生活
  • c++ make_pairpair
  • 10个常用的软件测试工具,你不容错过
  • CSS基础知识点
  • 工作流引擎Activiti系列(一)——初识
  • DHCP原理与配置
  • 二十大计算机专业证书,让你从芸芸众生中脱颖而出
  • (附源码)springboot万花筒 毕业设计 345600
  • Ubuntu 13.10安装ICE
  • 计算机专业答题神器,答题神器哪个好用 答题神器对比测评
  • Android开发丰富资源集锦
  • springboot基于web儿童教育网站 毕业设计-附源码111123
  • “WORD上次启动失败,以安全模式启动”的解决方法
  • (转)Three20 是什么
  • 微信公众号文章汇总
  • Docker——JVM 感知容器的 CPU 和 Memory 资源限制
  • 摄影师的专属:OPPO Find X3 Pro摄影师版深度体验
  • 探索黑客工具箱:HackTools,你的安全研究得力助手
  • socket接收汉字乱码问题
  • DDOS 攻击是什么?有哪些常见的DDOS攻击?
  • 服务器防护安全措施有哪些?
  • Remote Administrator 2.1中文版
  • Java的三大特性(基本特征)
  • 班级网页制作 HTML个人网页设计 我的班级网站设计与实现 大学生简单班级静态HTML网页设计作品 DIV布局班级网页模板代码 DW学生校园网站制作成品下载
  • 数学建模竞赛经验分享(从本科生到研究生,获奖成功率100%,我从数模所学)
  • 开发时间缩短90% Amaze UI助H5梦工场响应式网站快速上线
  • Ubuntu10.10中国版(附官方下载地址)
  • matlab中cellfun和arrayfun相关的几个问题
  • 微信小程序-页面开发
  • 最流行的三大数据建模工具