2018/1/31 19:02:08当前位置推荐好文程序员浏览文章

1. 什么是广播:

在Android中,Broadcast是一种广泛运用在应用程序之间传输信息的机制,Android中我们要发送的广播内容是一个Intent,这个Intent中可以携带我们要传送的数据。Broadcast可以实现不同程序间的数据传输与共享,只要和发送广播action相同的广播接收者,都可以接收到这个广播,也就是说,发送一个广播可以被很多广播接收者接收。

2. 广播的使用场景:

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

3. 广播的种类:

  1. 普通广播:Context.sendBroadcast
  2. 有序广播:Context.sendOrderedBroadcast
  3. 本地广播:只在自身App内传播,由LocalBroadcastManager完成

4. 广播的实现方式:

  1. 静态注册:通过在AndroidManifest清单文件中用<receive>进行注册的,注册完成就一直运行,静态注册的广播即使Activity销毁了,甚至进程被杀死了,还是可以收到广播。
  2. 动态注册:跟随Activity的生命周期,是在代码中调用registerReceiver来进行注册的,会随着Actvity的销毁而销毁。

5. 广播的实现机制:

  1. 自定义广播接收者BroadcastReceiver,并复写onReceive方法;
  2. 通过Binder机制向AMS(Activity Manager Service)进行注册;
  3. 广播发送者通过Binder机制向AMS发送广播;
  4. AMS查找符合相应条件(IntentFilter / Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中;
  5. 消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive方法。

6. LocalBroadcastManager详解:

  1. 使用它发送的广播将只在自身App内传播,因此你不必担心泄漏隐私数据
  2. 其它App无法对你的App发送该广播,因为你的App根本就不可能接收到非自身应用发送的该广播,因此你不必担心有安全漏洞可以利用
  3. 比系统的全局广播更加高效
  4. LocalBroadcastManager高效的原因主要是因为它内部是通过Handler实现的,它的sendBroadcast方法含义并非和我们平时所用的一样,它的sendBroadcast方法其实是通过handler发送一个Message实现的。
  5. 既然它内部是通过Handler来实现广播的发送的,那么相比于系统广播通过Binder实现那肯定是更高效了,同时使用Handler来实现,别的应用无法向我们的应用发送该广播,而我们应用内发送的广播也不会离开我们的应用。

喜欢本篇博客的简友们,就请来一波点赞,您的每一次关注,将成为我前进的动力,谢谢!

网友评论