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。这个标志是唯一使用的系统服务作为一种方便避免实施更复杂的机制在启动完成检测。

BroadcastReceiver最全实例——静态、动态、系统(监听短信、网络连接状态、SD卡、应用安装……)

BroadcastReceiver 原理推荐看这篇博客:http://yangguangfu.iteye.com/blog/1063732 实例,请看本文。 AndroidManifest.xml ...
  • lvyoujt
  • lvyoujt
  • 2016年04月11日 08:39
  • 2199

BroadcastReceiver的原理和使用

阿里工程师分享BroadcastReceiver的原理和使用
  • yueqian_scut
  • yueqian_scut
  • 2016年05月02日 23:19
  • 8166

BroadcastReceiver使用完全解析

我们都知道Android四大组件,以前刚写博客的时候也写过其它组件,尽管写的不好,当做学习的笔记吧!比如[Android四大组件之Activity](http://blog.csdn.net/mr_d...
  • Mr_dsw
  • Mr_dsw
  • 2016年05月13日 12:59
  • 2699

Android开发学习之路--Broadcast Receiver之初体验

学习了Activity组件后,这里再学习下另一个组件Broadcast Receiver组件。这里学习下自定义的Broadcast Receiver。通过按键自己发送广播,然后自己接收广播。新建MyB...
  • eastmoon502136
  • eastmoon502136
  • 2016年02月13日 21:32
  • 3957

BroadCastReceiver的基本使用方法

今天读了《第一行代码》并复习了一下广播机制,在这里做一个总结。 广播从类型上可以分为有序广播和标准广播两大类,从方法上分为静态注册的广播和动态注册的广播。在Android中,广播是跨进程的,因此在进...
  • u011521890
  • u011521890
  • 2016年07月05日 18:17
  • 1144

BroadcastReceiver生命周期探讨

前言之前做线控耳机连点两下切下一首歌的需求时, 曾经尝试在BroadcastReceiver中用一个成员变量保存最后一次按下的时间, 但后来发现这个值一直是初始值, 对它赋值后, 再次收到Intent...
  • oqqShaw123
  • oqqShaw123
  • 2015年09月10日 14:10
  • 2039

关于使用handler与BroadcastReceiver机制来处理动态改变U线程组件

当在同一个Activity中的一些操作会改变这个Activity上的组件显示,可以在这个UI线程(Activity)上设置handler并重写handleMessage()方法来处理消息,并在这个Ac...
  • shw372029857
  • shw372029857
  • 2015年08月20日 22:42
  • 1589

BroadcastReceiver 广播 系统全局的 消息发送及接收(未完成)

BroadcastReceiver的两种注册方式等
  • u011809714
  • u011809714
  • 2016年03月02日 20:42
  • 1590

Android在BroadcastReceiver中通过接口回调更新界面

之前写广播接收器都是写在Activity的内部的,觉得看起来很乱的感觉,毕竟广播也事和活动是同一级别的组件之一,哪儿能放在活动的里面啊,决定就来封装一下,发现居然没有思路,,同事说用静态类,直接点就可...
  • BoxRice
  • BoxRice
  • 2015年10月13日 17:45
  • 4259

通过broadcastReceiver刷新页面

在做项目时经常遇到一个页面上个列表,然后会对列表数据进行添加,删除,编辑等操作, 之前图方便就在onResume方法中增加一个刷新数据方法,但是体验很差,没有刷新数据也会调用刷新,也会增加流量开销 ...
  • kongxiuqi
  • kongxiuqi
  • 2015年12月15日 13:27
  • 751
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BroadcastReceiver 的区别细究
举报原因:
原因补充:

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