简述Android BroadcastReceiver

什么是广播?

用于监听或接收系统和应用发出的广播消息,并做出响应,因此广播分为两个角色:广播发送者、广播接收者。

接收广播的分类

  • 普通广播:
    使用sendBroadcast()方法发送, 他们是完全异步的,广播的全部接收者以未定义的顺序运行,通常在同一时间,这种方法非常高效,但是接收者不能使用结果或者终止API。
  • 有序广播:
    使用sendOrderedBroadcast()方法发送,他们每次只发送给一个接收者,由于每个接收者依次运行,它能为下一个接收者生成一个结果,或者它能完全终止广播以便不传递给其他接收者,有序接收者运行顺序由匹配的intent-filter的android:priority属性控制,具有相同优先级的接收者运行顺序随机。
  • 系统广播
  • 粘性广播

注册与注销

BroadcastReceiver的注册与注销推荐在OnStart()、OnStop()中进行。

广播的注册机制

  • 静态注册:
    在AndroidManifest.xml中用标签注册,并在标签内用标签设置过滤器。
    静态注册为常驻型广播,也就是说如果应用程序关闭了,有相应事件触发程序还是会响应。

  • 动态注册:
    registerReceiver()。
    动态注册为非常驻型广播,即它会跟随Activity的生命周期,所以在Activity结束前我们需要主动撤销注册否则会出现异常。

  • 区别:

    • 静态注册时
      执行完onReceive()方法,BroadcastReceiver对象的生命周期就已经到头了。因此不能在onReceive()中进行异步操作, 有可能异步操作还没完成,BroadcastReceiver所在的进程就被kill了。同样,成员变量无法保存它们的值,它们每次都是重新创建的, 之前的已经随着BroadcastReceiver对象被销毁了.。 某些情况下(进程不会被kill的)是可以用static变量的。

    • 动态注册时
      BroadcastReceiver的成员变量是可用的, BroadcastReceiver对象的生命周期是可控的。每次收到广播都是使用我们registerReceiver()时传入的对象处理的。 当然, 此时静态变量也是可用的。

注意:通过这种方式注册的广播为非常驻型广播,即它会跟随Activity的生命周期,所以在Activity结束前我们需要调用unregisterReceiver()方法移除它。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 面试题总结 通用 安卓学习途径, 寻找资料学习的博客网站 AndroidStudio使用, 插件使用 安卓和苹果的...
    JingBeibei阅读 1,721评论 2 21
  • 广播接收器 是Android的四大组件之一,可见广播在Android中的重要性; 1. 什么是广播? 广播(Bro...
    Lost_Robot阅读 1,978评论 2 10
  • 目录 前言 基础知识。 1.Android广播分为两个方面:广播发送者和广播接收者,通常情况下,Broadcast...
    博儿丶阅读 901评论 1 2
  • 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,Broadca...
    IT小魔女的故事阅读 568评论 0 2
  • 4月6号导师会诊后。老大与小伙伴给建议我。先澄清当时作选择时的想法后再作决定。先不要急着行动和选择。听完会诊后,能...
    羽辰在精进阅读 228评论 0 0