BroadcastReceiver 的区别细究

转载 2015年11月18日 15:38:03

1.android有序广播和无序广播的区别

BroadcastReceiver所对应的广播分两类:普通广播和有序广播。

普通广播通过Context.sendBroadcast()方法来发送。它是完全异步的。

所有的receivers接收器的执行顺序不确定。    因此,所有的receivers接收器接收broadcast的顺序不确定。

这种方式效率更高。但是BroadcastReceiver无法使用setResult系列,getResult系列及abort系列API

有序广播是通过Context.sendOrderedBroadcast来发送。所有的receiver依次执行。

BroadcastReceiver可以使用setResult系列函数来结果传给下一个BroadcastReceiver,通过getResult系列函数来取得上个BroadcastReceiver返回的结果,并可以abort系列函数来让系统丢弃该广播让,使用该广播不再传送到别的BroadcastReceiver。

可以通过在intent-filter中设置android:priority属性来设置receiver的优先级。优先级相同的receiver其执行顺序不确定。

如果BroadcastReceiver是代码中注册的话,且其intent-filter拥有相同android:priority属性的话,先注册的将先收到广播。

有序广播,即从优先级别最高的广播接收器开始接收,接收完了如果没有丢弃,就下传给下一个次高优先级别的广播接收器进行处理,依次类推,直到最后。

2.sendBroadcast和sendStickyBroadcast的区别

sendBroadcast中发出的intent在ReceverActivity不处于onResume状态是无法接受到的,即使后面再次使其处于该状态也无法接受到。

而sendStickyBroadcast发出的Intent当ReceverActivity重新处于onResume状态之后就能重新接受到其Intent.这就是the Intent will be held to be re-broadcast to future receivers这句话的表现。就是说sendStickyBroadcast发出的最后一个Intent会被保留,下次当Recevier处于活跃的时候,又会接受到它。

3. FLAG的影响
1)FLAG_RECEIVER_REPLACE_PENDING
这个flag 将会将之前的Intent 替代掉。加了这个flag,在发送一系列的这样的Intent 之后, 中间有些Intent 有可能在你还没有来得及处理的时候,就被替代掉了。
2)FLAG_RECEIVER_REGISTERED_ONLY:
如果Intent 加了这个Flag, 那么在Androidmanifest.xml 里定义的Receiver 是接收不到这样的Intent 的。
3)FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT:
如果Intent加了这个Flag,那么在启动检查时只能接受在代码中注册的Receiver。这个标志是唯一使用的系统服务作为一种方便避免实施更复杂的机制在启动完成检测。

相关文章推荐

ECshop--数据库模块细究

早上交任务的时候又被老大批了一顿 $fieldsValue = array("id"=>"98","type"=>"uuu","id"=>"66","type"=>"iii");话说能写出这样代码的人...

BEGIN_MESSAGE_MAP 细究

__pragma(warning(push))/*存储当前报警设置*/ __pragma(warning(disable:4867))/*关闭4867警告:错误地初始化了指向成员函数的指针*/ /*D...
  • ljfblog
  • ljfblog
  • 2012年03月05日 15:10
  • 380

SVN命令使用细究

近段时间在研究自动化编译的事情,从今天开始陆陆续续记录一些自己研究出来的东西,有可能杂乱无边,在完全搞懂之后在弄一篇全的, 希望精通此道的高手指导指导 1.checkout 在cmd中输入svn ...

ECshop--导航栏模块细究

花了一下午的时间,总算解决了。 本来想在前台界面上分析看看ecshop导航栏设置,在浏览器里面是定位到了“nav-manu”下面,然后子目录是在m_left下可以看到是动态生成一系列的ul,li...

【有趣的面试算法题】 数组循环移动算法细究

设计一个算法,把一个含有N个元素的数组循环右移K位,要求:时间复杂度为O(N),且只允许使用两个附加变量。 最直接的想法是“一步到位”,每个数据只移动或者交换一次,几经摸索,终于找到了解法,效率堪称基...

halcon例程 -- 逐字细究(五)

路标的识别及定位

细究DSP的AD转换(嵌入式实时系统的DSP软件开发技术)

设想一下一个正弦波经过模数转换器后变为离散的正弦信号以进行进一步处理。   首先要考虑的问题是以什么样的频率来采样或测量模拟信号,以准确的将信号在数字域中表示出来。采样频率是指以在数字域中表示某一事件...

细究代码之——dirname实现

开发中一部分工作是编写服务端的功能库,经常需要用到类似于Linux上dirname的功能。 先贴出第一个版本: #define IS_SLASH_P(c) (*(c) == '/' || *(c) ...

移动开发 细究MVVM

细究MVVM 熟悉WPF或Silverlight的同学应该不会对MVVM模式感到陌生了,它把应用程序划分成视图、视图模型和模型三层,如图1所示: 图 1 表面上,这个...

HGE系列之零 使用细究

  • 2009年12月29日 14:59
  • 7.24MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BroadcastReceiver 的区别细究
举报原因:
原因补充:

(最多只允许输入30个字)