Broadcast

是应用程序之间传输信息,通过Intent传输数据,可以进行多进程通信,不同组件通信,不同App之间通信。那么广播主要分为:SendBroadcast(普通广播)、SendOrderedBroadcast(有序广播)、LocalBroadcast(只在自身App内传播)


首先要进行注册广播

注册有两种,为静态注册,动态注册:

1.静态注册在清单文件中写,但不够灵活,注册过后,无论Activity什么状态,一直会存活下去,收到消息。

2.动态注册是跟随Activity的生命周期存活,注意的是,需要在onDestory中unReceiver(),避免内存泄漏。

机制:

1.重写onReceiver()方法

2.通过Binder机制向AMS进行注册

那么Binder大概都了解,是进程通信的核心,这里分享一篇大神博客:https://blog.csdn.net/freekiteyu/article/details/70082302

AMS 即ActivityManagerService 是贯穿四大组件核心服务,负责四大组件切换,启动,应用程序和管理调度

3.详细的接收广播的注册以及接收:

首先:broadcast通过binder 在AMS中注册

其次:广播发送者通过binder想AMS发送广播

接下来:AMS查找条件,符合否话在broad队列中拿到,进行接口回调。

\"\"

下图为通过binder客户端和服务器之间进行通信的一个过程:

\"\"

关于本地广播:

他有一个特点就是不必担心数据的泄漏,安全漏洞被利用。比较全局广播,本地广播更加高效。

 那么为何高效?

1.我们看他的底层,是通过hanlder 实现的,他的sendBroadcast,是通过handler发送一个Message实现的

2.比Binder发送更加高效,隔离的方法无法接收到其他发来的广播

3.有2个map集合一个List集合接收广播对象。

收藏 打印