一、定义
在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制,Android中我们要发送的广播内容是一个Intent,这个Intent中可以携带我们要传送的数据。
二、使用场景
1.同一app内部的同一组件内的消息通信(单个或多个线程之间);
2.同一app内部的不同组件之间的消息通信(单个进程);
3.同一app具有多个进程的不同组件之间的消息通信;
4.不同app之间的组件之间消息通信;
5.Android系统在特定情况下与App之间的消息通信。
三、广播种类
1、普通广播 Normal Broadcast;
优点:完全异步,消息传递效率高,
缺点:不能处理广播传给一个接收者,不能终止广播的传播
2、系统广播 System Broadcas;
3、APP应用内广播 Local Broadcast:只在自身App内传播;
4、有序广播 Ordered Broadcast;
优点:可以根据广播接收者的优先级依次传播,广播接收者可以处理广播然后再传给一下广播接收者,也可以根据需要调用abortBroadcast()终止广播传播。
缺点:效率低
5、粘性广播 Sticky Broadcast.
四、实现广播
1 静态注册:注册完成就一直运行;
2 动态注册:跟随Activity的生命周期.
五、内部实现机制
1 自定义广播接收者BroadcastReceiver,并重新onRecvice()方法;
2 通过Binder机制向AMS(Activity Manager Service)进行注册;
3 广播发送者通过Binder机制向AMS发送广播;
4 AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,
将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中;
5 消息循环执行拿到此广播,回调BroadcastReceiver中的onReveive()方法。
六、LocalBroadcastManager
1 使用它发送的广播将只在自身APP内传播,因此你不必担心泄漏隐私数据。
2 其它APP无法对你的APP发送该广播,因为你的APP根本就不可能接收到非自身应用发送的该广播,因此你不必担心有安全漏洞可以利用。
3 比系统的全局广播更加高效。
七、LocalBroadcastManager(源码总结)
1 LocalBroadcastManager高效的原因主要是因为它内部是通过Handler实现的,它的sendBroadcast()含义并非和我们平时所用的一样,它的sendBroadcast()其实是通过handler发送一个Message实现的。
2 既然是它内部是通过Handler来实现广播的发送的,那么相比与系统广播通过Binder实现那肯定是更高效了,同时使用Handler来实现,别的应用无法向我们的应用发送该广播,而我们应用内发送的广播也不会离开我们的应用。
3 LocalBroadcastManager内部协作主要是靠这两个Map集合:mReceivers和mActions,当然还有一个List集合mPendingBroadcasts,这个主要就是存储待接收的广播对象。
网友评论