Android广播Broadcast

一、Broadcast简介

Broadcast是android中的四大组件之一,是在组件之间传播数据(Intent)的一种机制。广播的发送者和接收者事先是不需要知道对方的存在的。这样带来的好处便是,系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易与其它系统进行集成。

广播具有以下特性:

1.广播接收者的生命周期是非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁
2.广播接收者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框
3.最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉
4.耗时的较长的工作最好放在服务中完成

二、Broadcast的分类

1. 普通广播(自定义广播)

普通广播是完全异步的,通过Context的sendBroadcast()方法来发送,通过onReceive方法接收。消息传递效率比较高,但所有receivers(接收器)的执行顺序不确定。缺点在于:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播,直到没有匹配的接收器广播时才能停止传播。

2. 系统广播

Android中内置了多个系统广播:只要涉及到手机的基本操作(如开机、网络状态变化、拍照等等),都会发出相应的广波,每个广播都有特定的Intent - Filter(包括具体的action),android常用系统广播action如下:

3.有序广播(Ordered Broadcast)

Android中的有序广播,也是一种比较常用的广播,该种类的广播用sendOrderedBroadcast发送。该广播主要有以下特性:

  1. 按照接收者的优先顺序来接收广播,优先级别在intent-filter中的priority中声明,-1000到1000之间,值越大优先级越高,
  2. 可以终止广播的继续传播,接受者可以修改intent的内容。
  3. 同级别接收顺序是随机的,级别低的后收到
  4. 能截断广播的继续传播,高级别的广播接收器接收广播后能决定时候截断。能处理广播
  5. 同级别动态注册高于静态注册

4.  粘性广播(Sticky Broadcast)

粘性广播的特点是Intent会一直保留到广播事件结束,而这种广播也没有所谓的10秒限制,10秒限制是指普通的广播如果onReceive方法执行时间太长,超过10秒的时候系统会将这个广播置为可以干掉的candidate,一旦系统资源不够的时候,就会干掉这个广播而让它不执行。该广播用sendStickyBroadcast发送。

5.  App应用内广播(Local Broadcast)

因为android中的广播是可以跨域的(跨App),因此可能存在一下问题:其他App针对性发出与当前App intent-filter相匹配的广播,由此导致当前App不断接收广播并处理;其他App注册与当前App一致的intent-filter用于接收广播,获取广播具体信息; 即会出现安全性和效率性的问题。

对于上述情况就出现了这种广播,App应用内广播可理解为一种局部广播,广播的发送者和接收者都同属于一个App。相比于全局广播(普通广播),App应用内广播优势体现在:安全性高效率高。

三、BroadcastReceiver

BroadcastReceiver是一种可以让用户接受广播通知且没有用户界面的组件,在android系统中为了响应不同的事件通知,应用程序可以注册不同的BroadcastReceiver,当BroadcastReceiver接受到通知后可以启动Activity作为响应或者通过NotificationManager提醒用户。

对于不同注册方式的广播接收器回调OnReceive(Context context,Intent intent)中的context返回值是不一样的:

  1. 对于静态注册(全局+应用内广播),回调onReceive(context, intent)中的context返回值是:ReceiverRestrictedContext;
  2. 对于全局广播的动态注册,回调onReceive(context, intent)中的context返回值是:Activity Context;
  3. 对于应用内广播的动态注册(LocalBroadcastManager方式),回调onReceive(context, intent)中的context返回值是:Application Context。

Android广播(Broadcast)相关推荐

  1. Android 广播(Broadcast)

    Android 广播Broadcast 1.小声嘀咕 2.广播机制简介 3.接收系统广播 3.1动态注册 3.2静态注册 4.发送自定义广播 4.1标准广播 4.2有序广播 5.使用本地广播 1.小声 ...

  2. Android广播机制:Broadcast

    转载:Android总结篇系列:Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广 ...

  3. Android之Broadcast, BroadcastReceiver(广播)

    在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver 活动(Activity) - 用于表现功能 服务(Service) - 相当 ...

  4. Android中的广播Broadcast详解

    今天来看一下Android中的广播机制,我们知道广播Broadcast是Android中的四大组件之一,可见他的重要性了,当然它的用途也很大的,比如一些系统的广播:电量低.开机.锁屏等一些操作都会发送 ...

  5. Android 30. 广播-Broadcast(一)

    为了便于进行系统级别的消息通知,Android 引入了Broadcast 机制. Android 中每个应用程序都可以对自己感兴趣的Broadcast 进行注册,其消息可能来自系统,也可能来自其他应用 ...

  6. android 广播解绑,Android四大组件之BroadCast

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Android四大组件之BroadCast 一.广播概述 Android应用可以从Android系统和其他Android ...

  7. Android 广播的生命周期

    一:Android 广播的生命周期          一个广播接收者有一个回调方法:void onReceive(Context curContext, Intent broadcastMsg).当一 ...

  8. 品茗论道说广播(Broadcast内部机制讲解)

    1 概述 我们在编写Android程序时,常常会用到广播(Broadcast)机制.从易用性的角度来说,使用广播是非常简单的.不过,这个不是本文关心的重点,我们希望探索得再深入一点儿.我想,许多人也不 ...

  9. Android中BroadCast与Activity之间的通信

    在看本文之前,假设你对于Android的广播机制不是非常了解.建议先行阅读我转载的一篇博文:图解 Android 广播机制. 因为本案例比較简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: ...

最新文章

  1. ios app证书申请基本流程
  2. mybatis逆向工程生成的Example类的使用
  3. POJ1904 强联通(最大匹配可能性)
  4. reg怎样存取注册表信息
  5. 知乎用户行为预测数据比赛,10万奖金等你来Battle!
  6. echarts在.Net中使用实例(二) 使用ajax动态加载数据
  7. poj-2955-Brackets-区间DP
  8. 照相机滤镜使用,优化解码和滤镜导致的预览卡屏现象
  9. 图解Kafka中的基本概念
  10. easyui-combobox实现placeholder提示效果
  11. 编译OpenJDK8:CoreLibraries.gmk:37/e_acos.obj/BuildJdk.gmk:70/Main.gmk:116/错误
  12. JAVA集合4(Map接口)
  13. 何凯明:Single Image Haze Removal Using Dark Channel Prior[CVPR 2009]
  14. 用python写一个爬取周杰伦所有歌词的爬虫
  15. 苹果手机显示没有连接服务器怎么办啊,苹果手机更新连接到服务器出现问题怎么办...
  16. 小学奥数公式大全 学习奥数必备“工具”
  17. openwrt多wan限上下行速脚本,基于qosv4,imq模块替换成ifb模块
  18. java 获取两个时间差_java如何获取两个日期的时间差
  19. linux解压gz.gz文件,linux解压tar.gz并重命名_linux解压tar.gz文件
  20. 越疆dobot机械臂_Dobot机械臂魔术师系类

热门文章

  1. 我参加NVIDIA Sky Hackathon(系统环境配置)
  2. JAVA--发送Google邮件
  3. MySQL的utf8与utf8mb4编码,以及utf8_bin、utf8_general_ci编码区别
  4. SSM项目使用Mybatis通用mapper插件tk.mybatis的用法
  5. 开发工具之VisualStudio
  6. python中resample函数实现重采样和降采样
  7. TopMost安装和使用
  8. Linux下怎么退出telnet命令行
  9. JQUERY为元素添加样式的实现方法
  10. 如何將excel內容导出XML