作为android 的四大基本组件之一的 BroadCast Receiver,是进行进程间通信的重要手段,几乎所有的应用都会注册和发送各种不同的intent, 那么有一个问题,你是否了解Intent?  作为延伸,我们需要了解一下 sendBroadcast()  / sendOrderedBroadcast() /  sendStickyBroadcast() 这三个方法的不同。

1)sendBroadcast: 最普通的发送intent的方式,是一种无序的广播机制,理论上,所有的接受者同时获得该intent的消息, 接受者之间不存在先后顺序, 不能截断/修改intent的数据。 应用普遍使用的就是该方式。

2)sendOrderedBroadcast: 是有序的发送广播的机制,所有接受者都可以设置priority , 按照priority 的大小顺序进行传递, 上一个优先级的接受者,可以截断和修改intent里面的数据。 同时,也可以设置一个最后接收者(总是在最后一个接收到这个intent,用来做一些特定的功能)。

3)sendStickyBroadcast: 是一种粘性广播。所谓的粘性是指,这个intent 没有周期限制, 一般的intent 只能发送给当前已经注册了这个监听的receiver,一旦发送完毕就会失去作用周期,而粘性广播没有这个限制,即便后来注册的intent也可以收到这个广播。 需要注意的一点是 这种发送方式不会导致ANR, 因为它没有发送时间的限制。

UserHandle.ALL、UserHandle.CURRENT、UserHandle.CURRENT_OR_SELF、UserHandle.OWNER的定义与区别

  • UserHandle.ALL  -------------设备上所有用户均可接收到广播
  • UserHandle.CURRENT  ----------------设备上当前用户可接收到广播
  • UserHandle.CURRENT_OR_SELF  ----------设备上当前用户或者该应用所属用户可接收到广播
  • UserHandle.OWNER  ------------------设备所有者可接收到广播

如: sendBroadcastAsUser(intent, UserHandle.OWNER);

发送,使用sendStickyBroadcast 发送广播需要获得BROADCAST_STICKY permission,如果没有这个permission则会抛出异常。

Intent intent = new Intent("com.android.action.sticky.broadcast");
intent.putExtra("sent_count", mStickyBrcCount);
mContext.sendStickyBroadcast(intent,UserHandle.ALL);

接收

private BroadcastReceiver  mReceiver = new BroadcastReceiver () {@Overridepublic void onReceive(Context context, Intent intent) {final String action = intent.getAction();int count = intent.getIntExtra("sent_count", -1);Log.d(TAG, "action = " + action + "and count = " + count);//context.removeStickyBroadcast(intent);}

BroadCast三种方式相关推荐

  1. 宿主机为linux、windows分别实现VMware三种方式上网(转)

    一.VMware三种方式工作原理 1 Host-only连接方式  让虚机具有与宿主机不同的各自独立IP地址,但与宿主机位于不同网段,同时为宿主主机新增一个IP地址,且保证该IP地址与各虚机IP地址位 ...

  2. ADB——连接手机的三种方式

    ADB--连接手机的三种方式 有USB连接 硬件状态正常. 包括 Android 设备处于正常开机状态,USB 连接线和各种接口完好. Android 设备的开发者选项和 USB 调试模式已开启. 可 ...

  3. 远程控制virtual box虚拟机系统的三种方式

    远程控制virtual box虚拟机系统的三种方式[阅读时间:5分钟] 1.使用现有的远程控制软件 2.使用SSH连接 3.使用远程桌面控制虚拟机系统 对于把虚拟机安装在寝室笔记本的人来说,能够远程控 ...

  4. 命令行运行Python脚本时传入参数的三种方式

    三种常用的方式 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. python script.py 0,1,2 10 python script ...

  5. sass文件编译的三种方式【舒】

    [舒:]sass文件编译的三种方式 方式一: 1.webstorm打开evtGulp项目或者mcake-activity项目 2.中,开启gulp->default/develop,启动watc ...

  6. java多线程w3c_Java创建多线程的三种方式

    前言 这篇文章主要讲述线程的概念.组成.Java创建多线程的三种方式以及线程的类型. 线程概念 线程和进程的区别 **进程:**正在运行的程序,例如:你打开 的qq音乐.exe程序,其由PCB(进程控 ...

  7. vue 函数 路由跳转_vue中通过路由跳转的三种方式

    router-view 实现路由内容的地方,引入组件时写到需要引入的地方 需要注意的是,使用vue-router控制路由则必须router-view作为容器. 通过路由跳转的三种方式 1.router ...

  8. linux+Qt 下利用D-Bus进行进程间高效通信的三种方式

    linux+Qt 下利用D-Bus进行进程间高效通信的三种方式 原文链接: https://www.cnblogs.com/wwang/archive/2010/10/27/1862552.html ...

  9. ios 应用和电脑共享文件夹_堪比AirDrop,苹果 iPhone与Windows电脑互传文件的三种方式...

    如果你是苹果全家桶用户,一定会对 「AirDrop(隔空投送)」 功能赞誉有加,使用 AirDrop 可以在 iPhone 与 MacBook.iPad 等设备之间快速传递照片.视频或文件. 遗憾的是 ...

最新文章

  1. python 打印所有汉字
  2. 左右居中_008布局题:div垂直居中,左右10px,高度始终为宽度一半
  3. 误删/var/lib/dpkg/info,文件解决方案(是否完全解决,不确定)
  4. 初试django模型层
  5. H.264学习过程中遇到的英文缩写整理
  6. [工具] Sublime Text 使用指南
  7. VOCALOID3洛天依新手入门教程(一)
  8. tecplot 360 2018 R1 R2安装教程及软件百度云
  9. linux下罗技摄像头采集图片,linux下寻找罗技摄像头快看酷讯版驱动
  10. 快速提高网站排名软件
  11. java 加权平均_SPSS用加权平均值计算百分位数
  12. VSTOOutlook发邮件时To中和中按照名字首字母排序
  13. SQL获取当天0点0分0秒和23点59分59秒方法
  14. 对udp组播流(MPTS)进行简单的收录
  15. 计算机中文字体的独创性,计算机中文字体中单字的著作权保护研究(2)
  16. QTextLine、QGlyphRun、QTextLayout
  17. 字符串低位优先排序(LSD)和高位优先排序(MSD)原理及C++实现
  18. 人工蜂群算法c语言程序,基于人工蜂群算法的炼钢连铸生产调度方法研究
  19. mothur trim.seqs 去除PCR引物
  20. 华为网络生成树协议-STP

热门文章

  1. 怎样在线制作GIF动图图片?教你一招在线动画制作的方法
  2. 微信小程序/uni-app生成海报功能@令狐张豪
  3. 【C++引用超详细笔记, 引用、指针和值传递的汇编级辨析,对象、继承和引用】
  4. 小学计算机实验考查总结,金井镇2013年观佳小学六年级科学实验考查总结
  5. win7蓝屏代码含义~
  6. 客户地图制作软件,哪个软件可以绘制室内地图
  7. 电子器件系列七:看门狗
  8. 10.18 小米笔试小记
  9. windows无法启动 windows defender Firewall 服务 解决方案
  10. #swust oj978,979,980输出利用先序遍历创建的二叉树的中序遍历序列,后序遍历序列,层次遍历序