一 .广播的使用场景.

  1. 同一app具有多个进程的不同组件之间的消息通信.
  2. 不同app之间的组件之间消息通信.

二 .广播种类

  1. Normal Broadcast : Context.sendBroadcast

  2. System Broadcast : Context.sendOrderedBroadcast

  3. Local Broadcast: 只在自身App内传播

三 .实现广播

  1. 静态注册: 注册完成就一直运行,在其依赖的activity销毁后也会收到广播,或者在 app被kill后也会收到广播.

  2. 动态注册: 跟随activity的生命周期.

四 .广播的内部实现机制.

  1. 自定义广播接收者BroadcastReceiver, 并复写onReceive()方法.

  2. 通过Binder机制向AMS(Activity Manager Service)进行注册.

  3. 广播发送者通过Binder机制向AMS发送广播.

  4. AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastaReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中.

  5. 消息循环执行拿到此广播,回调BroadcastReceiver中的onReceiver()方法.

五 .LocalBroadcastManager详解.

  1. 使用它发送的广播将只在自身App内传播,因此不必担心泄露隐私数据.

  2. 比系统的全局广播更加高效.

  3. 其它App无法对你的App发送该广播,因为你的App根本就不可能接受接收到非自身应用发送的该广播,因此你不必担心有安全漏洞可以利用了.

LocalBroadcastManager内部也是用Handler机制来实现的,可以看出LocalBroadcastManager也是运行在UI线程上的.

当你调用LocalBroadcastManager的sendBroadcast时候,实际内部实现的是Handler来发送消息.

results matching ""

    No results matching ""