谈谈你对 Binder 的理解

原始网页直通车



Binder 是什么?

  • Binder :黏合剂,可以理解为黏合了两个不同的进程。
    https://i-blog.csdnimg.cn/blog_migrate/39727b5fe74e2bd3b23cc1afe84bf165.png

为什么选择 Binder ?

我们知道 Android 虚拟机是基于 Linux 实现的,而 Linux 的 IPC 通信主要有管道、消息队列、信号量、socket、共享内存等。

我们在开发 APP 时都会要求性能好,数据安全且传输快,所以我们首要从性能和安全性这两方面来看:

性能

  • socket 作为一款通用接口,其传输效率低,开销大,主要用在跨网络的进程间通信和本机上进程间的低速通信。
  • 消息队列和管道采用 存储-转发 方式,即数据先从发送方缓存区拷贝到内核开辟的缓存区中,然后再从内核缓存区拷贝到接收方缓存区,至少有两次拷贝过程。
  • 共享内存虽然无需拷贝,但控制复杂,难以使用。
  • Binder 基于 Client-Server 通信模式,传输过程只需一次拷贝,性能较好,效率虽然比共享内存的零次要低,但比管道和 socket 的两次要高。

安全性

BinderClient-Server 通信模式,为发送方添加 UID/PID 身份,既支持 实名Binder 也支持 匿名Binder ,保证了跨进程通讯的安全。


引用一张图:
https://i-blog.csdnimg.cn/blog_migrate/50364a61e0f8ab20ce8e0cf09937c004.png


Binder 通信流程

  1. ServiceServiceManager 中注册
  2. Client 想要调用 Service 的方法,需要先获取 Service 对象, ServiceManager 会返回给它一个代理对象,即 Proxy
  3. Client 调用 Proxy 的方法, ServiceManager 会帮它调用 Service 对应的方法,并把结果返给它。

Android 中使用 Binder 的场景

ActivityManagerServicePackageManagerServiceWindowManagerServiceXXXManagerService 形式的基本都会用到,一般会在 SystemService 来注册这些系统服务。

其它的如 NotificationCompatSideChannelServiceContentProviderNative 等等,都有引用到。


参考链接

Android跨进程通信:图文详解 Binder 机制 原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值