系统面试必须要会的几个binder经典面试题(有解答)

‌Binder调用自己进程中的方法时,是否会经过Binder驱动?‌

‌不会‌:通过queryLocalInterface()方法判断,若返回本地接口(如IStudentInterface),则直接调用本地方法,不经过驱动。
‌示例‌:在onServiceConnected回调中,若service与调用者同进程,asInterface()返回本地接口,无Binder事务。

  1. ‌Binder线程、主线程、Client请求线程的区别?‌
    ‌Binder线程‌:执行Binder服务的载体,负责处理跨进程请求。
    ‌主线程‌:UI线程,处理用户交互和界面更新。
    ‌Client请求线程‌:发起跨进程请求的线程,需注意同步与异步调用的选择。

Binder与Socket都在安卓系统中有使用,请问如何选着?

选择Binder的场景
需要系统权限验证(如调用系统API)

高频小数据量通信(< 1MB)

需要同步返回结果的RPC调用

系统服务集成(必须通过ServiceManager)

需要死亡通知(linkToDeath机制)

选择Socket的场景
持续数据流传输(传感器、音频)

跨设备/网络通信

Input事件传递(系统级事件分发)

实时性要求高但数据量大
总结

Binder——用于精确控制、命令传递、权限管理,适合结构化API调用。

Socket——用于大量数据流传输,适合实时性要求高的连续数据。

为什么Android要自研Binder,而不用Linux已有的进程通信?

传统的IPC方式有很多,比如管道,socket,共享内存,消息队列,信号量等,但为何google就选中了binder作为IPC方式呢?

1.易用binder可以很好的实现c-s架构

android系统提供的各种服务实现都由不同的server提供,当client需要获取某个server的服务时,只需要client向server发送相应的请求,server收到请求后进行处理,再将结果返回给client.但是传统的IPC通信手段中,只有socket支持c-s的通信方式,但是socket主要用于网络间通信和本机进程间的低速通信,传输效率太低。

2.‌性能优势,binder的传输效率和可操作性好

传统的IPC通信,比如消息队列,管道采用的存储-转发的方式,使用它们进行IPC通信时,需要经过2次内存拷贝,效率太低。而采用binder机制的话,只需要一次内存拷贝即可,而共享内存虽然进行内存拷贝的次数为0,但是共享内存操作复杂,也不适合这种场景。当然,socket也要其适用的场景,比如android系统中的Input系统,而管道也在android looper中发挥着重要作用。

3.安全性,binder的安全性高

传统的IPC机制没有安全措施,完全依赖上层协议来保证。接收方无法获得对方进程可靠的UID/PID,从而无法鉴别对方身份,而binder机制则为每个进程分配了UID/PID来作为鉴别身份的标识,并且在binder通信时会根据UID/PID进行有效性检测,这样就保证了通信的安全性,是其它IPC通信方式所不能及的。

一次拷贝的具体含义

我们看到从client到binder驱动,再到server 端,有大量的copy过程,不论是copy_to_user(),还是copy_from_user(),好像拷贝过程无处不在,那么我们常见的说binder的优势在于一次拷贝,到底优在何处呢?其实这个拷贝说的是一次binder通信过程,即client到binder驱动,再到server端,这是一次binder通信过程,在这个过程中,从client把数据拷贝到binder驱动,是一次拷贝过程,不论这个过程中调用了多少次copy_from_user(),而从binder驱动到server,是一次映射过程,不用拷贝,这就是所谓的一次拷贝。而拷贝的数据,也仅仅是业务所需要的parcel数据,而用于binder驱动交互的一些命令等数据,还是需要拷贝的。

具体流程可以用下图说明:

image_S-2XjhhNV1.png

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值