1. 什么是广播:
在Android中,Broadcast是一种广泛运用在应用程序之间传输信息的机制,Android中我们要发送的广播内容是一个Intent,这个Intent中可以携带我们要传送的数据。Broadcast可以实现不同程序间的数据传输与共享,只要和发送广播action相同的广播接收者,都可以接收到这个广播,也就是说,发送一个广播可以被很多广播接收者接收。
2. 广播的使用场景:
- 同一app具有多个进程的不同组件之间的消息通信。
- 不同app之间的组件之间消息通信。
3. 广播的种类:
- 普通广播:Context.sendBroadcast
- 有序广播:Context.sendOrderedBroadcast
- 本地广播:只在自身App内传播,由LocalBroadcastManager完成
4. 广播的实现方式:
- 静态注册:通过在AndroidManifest清单文件中用<receive>进行注册的,注册完成就一直运行,静态注册的广播即使Activity销毁了,甚至进程被杀死了,还是可以收到广播。
- 动态注册:跟随Activity的生命周期,是在代码中调用registerReceiver来进行注册的,会随着Actvity的销毁而销毁。
5. 广播的实现机制:
- 自定义广播接收者BroadcastReceiver,并复写onReceive方法;
- 通过Binder机制向AMS(Activity Manager Service)进行注册;
- 广播发送者通过Binder机制向AMS发送广播;
- AMS查找符合相应条件(IntentFilter / Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中;
- 消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive方法。
6. LocalBroadcastManager详解:
- 使用它发送的广播将只在自身App内传播,因此你不必担心泄漏隐私数据
- 其它App无法对你的App发送该广播,因为你的App根本就不可能接收到非自身应用发送的该广播,因此你不必担心有安全漏洞可以利用
- 比系统的全局广播更加高效
- LocalBroadcastManager高效的原因主要是因为它内部是通过Handler实现的,它的sendBroadcast方法含义并非和我们平时所用的一样,它的sendBroadcast方法其实是通过handler发送一个Message实现的。
- 既然它内部是通过Handler来实现广播的发送的,那么相比于系统广播通过Binder实现那肯定是更高效了,同时使用Handler来实现,别的应用无法向我们的应用发送该广播,而我们应用内发送的广播也不会离开我们的应用。
喜欢本篇博客的简友们,就请来一波点赞,您的每一次关注,将成为我前进的动力,谢谢!