18 Broadcast介绍
(转自;http://www.cnblogs.com/lwbqqyumidi/p/4168017.html)
Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。广播作为Android组件间的通信方式,可以使用的场景如下:
(1)同一App内部的同一组件内的消息通信(单个或多个线程之间);
(2)同一App内部的不同组件之间的消息通信(单个进程);
(3)同一App具有多个进程的不同组件之间的消息通信;
(4)不同App之间的组件之间消息通信;
(5)Android系统在特定情况下与App之间的消息通信。
从实现原理看上,Android中的广播使用了观察者模式,基于消息的发布/订阅事件模型。因此,从实现的角度来看,Android中的广播将广播的发送者和接受者极大程度上解耦,使得系统能够方便集成,更易扩展。
具体实现流程要点粗略概括如下:
(1)广播接收者BroadcastReceiver通过Binder机制向AMS(ActivityManager Service)进行注册。
(2)广播发送者通过binder机制向AMS发送广播。
(3)AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中。
(4)消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法。
对于不同的广播类型,以及不同的BroadcastReceiver注册方式,具体实现上会有不同。但总体流程大致如上。
广播发送者和广播接收者分别属于观察者模式中的消息发布和订阅两端,AMS属于中间的处理中心。广播发送者和广播接收者的执行是异步的,发出去的广播不会关心有无接收者接收,也不确定接收者到底是何时才能接收到。