3.4.3 广播事件的发送

介绍了广播事件的监听,再来看一下广播事件的发送。和界面组件的调用类似,广播事件也是通过Intent对象来表示的。不同的是,广播事件需要通过Context.sendBroadcast或Context.sendOrderedBroadcast函数进行发送。

Android的事件广播主要有两种模式。一种是通过Context.sendBroadcast方法进行发送,这被称为普通广播模式(Normal Broadcast)。在这种模式下,所有注册了该广播事件的触发器组件都会获得事件通知,并发地在各自的应用进程中执行。开机事件是一个典型的广播事件,当Android系统启动后会广播该事件。这样,所有监听了开机事件的应用都可以获得相关事件的通知,从而有机会做一些应用初始化的工作。

另一种广播事件被称为有序广播模式(Order Broadcast),它通过调用Context.sendOrderedBroadcast函数进行发送。所有监听该事件的触发器组件,都会依照设定的优先级进行排序,从高到低依次处理该事件。高优先级的触发器组件可以通过BroadcastReceiver.abortBroadcast方法优先终止这个广播事件的传播,这样,低优先级的触发器组件就不再有机会处理该事件了。

在有序广播事件的传递过程中,每个执行中的触发器组件都可以通过BroadcastReceiver.setResult等函数在该事件消息中附加额外的数据,而下一个处理该事件的触发器组件则能够使用这些数据(通过BroadcastReceiver.getResultData等方法)。通过这样的方式,事件广播来构成一个消息数据处理链。

为了保证该事件一定会被处理,广播事件的发送者还可以指明默认触发器组件(Final Receiver),如果事件的传播没有被提前终止,该触发器组件会在最后来响应该事件。

一个典型的有序广播事件是关机事件。在关机事件的传播过程中,相关的触发器组件随时可以根据用户的需求终止该事件的继续传播。如果没有其他触发器组件处理关机事件,默认触发器组件将响应并执行关机操作。