(转自; http://www.cnblogs.com/lwbqqyumidi/p/4168017.html)
18.3广播发送及广播类型
经常说”发送广播“和”接收“,表面上看广播作为Android广播机制中的实体,实际上这一实体本身是并不是以所谓的”广播“对象存在的,而是以”意图“(Intent)去表示。
定义广播的定义过程,实际就是相应广播”意图“的定义过程,然后通过广播发送者将此”意图“发送出去。被相应的BroadcastReceiver接收后将会回调onReceive()函数。
18.3.1Normal Broadcast:普通广播
普通广播是完全异步的,通过Context的sendBroadcast函数来发送,消息传递的效率比较高,但所有的receviers的执行顺序不确定。
缺点:接收者不能将处理结果传递给下一个接受者,并且无法终止广播Intent的传播,直到没有预支匹配的广播接收器为止。
18.3.2System Broadcast: 系统广播
Android系统中内置了多个系统广播,只要涉及到手机的基本操作,基本上都会发出相应的系统广播。如:开机启动,网络状态改变,拍照,屏幕关闭与开启,电量不足等。每个系统广播都具有特定的intent-filter,其中主要包括具体的action,系统广播发出后,将被相应的BroadcastReceiver接收。系统广播在系统内部当特定事件发生时,有系统自动发出。
18.3.3Ordered broadcast:有序广播
有序广播的有序广播中的“有序”是针对广播接收者而言的,指的是发送出去的广播被BroadcastReceiver按照先后循序接收。有序广播的定义过程与普通广播无异,只是其的主要发送方式变为:sendOrderedBroadcast(intent,receiverPermission, ...)。
对于有序广播,其主要特点总结如下:
A多个当前已经注册且有效的BroadcastReceiver接收有序广播时,是按照先后顺序接收的,先后顺序判定标准遵循为:将当前系统中所有有效的动态注册和静态注册的BroadcastReceiver按照priority属性值从大到小排序,对于具有相同的priority的动态广播和静态广播,动态广播会排在前面。
B当广播接收器收到广播后,可以使用setResult()函数把结果传给下一个接收器,通过getResult()函数取得上个广播接收器返回的结果,并可用abortBroadcast()函数让系统丢弃该广播,使改广播不再被别的接收器接收到。
18.3.4Sticky Broadcast:粘性广播
(在 android 5.0/api 21中deprecated,不再推荐使用,相应的还有粘性有序广播,同样已经deprecated)。