一 .广播的使用场景.
- 同一app具有多个进程的不同组件之间的消息通信.
- 不同app之间的组件之间消息通信.
二 .广播种类
Normal Broadcast : Context.sendBroadcast
System Broadcast : Context.sendOrderedBroadcast
Local Broadcast: 只在自身App内传播
三 .实现广播
静态注册: 注册完成就一直运行,在其依赖的activity销毁后也会收到广播,或者在 app被kill后也会收到广播.
动态注册: 跟随activity的生命周期.
四 .广播的内部实现机制.
自定义广播接收者BroadcastReceiver, 并复写onReceive()方法.
通过Binder机制向AMS(Activity Manager Service)进行注册.
广播发送者通过Binder机制向AMS发送广播.
AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastaReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中.
消息循环执行拿到此广播,回调BroadcastReceiver中的onReceiver()方法.
五 .LocalBroadcastManager详解.
使用它发送的广播将只在自身App内传播,因此不必担心泄露隐私数据.
比系统的全局广播更加高效.
其它App无法对你的App发送该广播,因为你的App根本就不可能接受接收到非自身应用发送的该广播,因此你不必担心有安全漏洞可以利用了.
LocalBroadcastManager内部也是用Handler机制来实现的,可以看出LocalBroadcastManager也是运行在UI线程上的.
当你调用LocalBroadcastManager的sendBroadcast时候,实际内部实现的是Handler来发送消息.
