news 2026/6/10 16:27:49

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
系统面试必须要会的几个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驱动交互的一些命令等数据,还是需要拷贝的。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:50:27

焊接工艺PLC数据采集到本地算法训练服务器的解决方案

某汽车焊装车间深度融合人工智能及时&#xff0c;对关键生产流程进行智能化改造。现场部署有多台焊接机器人与高清摄像头&#xff0c;要求将焊接机器人运行数据和摄像头抓拍画面采集起来&#xff0c;对接到本地训练服务器中&#xff0c;从而建立一个自主训练、识别、告警的管理…

作者头像 李华
网站建设 2026/6/9 21:11:07

基于Python代码构造的压力测试工具

Locust 是一个开源负载测试工具&#xff0c;通过 Python 形式的代码构造来定义用户行为&#xff0c;而不是与混乱的 UI 和臃肿的 XML 配置纠缠在一起。 先决条件 Python&#xff08; pip 用于安装 locust 包&#xff09; 任何模拟负载测试的 HTTP 服务。&#xff08;我们将创…

作者头像 李华
网站建设 2026/6/10 12:35:15

错过Open-AutoGLM autodl等于错过AI未来?5个理由告诉你必须立即上手

第一章&#xff1a;错过Open-AutoGLM autodl等于错过AI未来&#xff1f;在人工智能技术飞速演进的当下&#xff0c;自动化机器学习&#xff08;AutoML&#xff09;正从辅助工具演变为驱动创新的核心引擎。Open-AutoGLM 的 autodl 框架凭借其对大语言模型与自动深度学习的深度融…

作者头像 李华
网站建设 2026/6/10 12:35:23

Java毕设选题推荐:基于springboot的社区居民服务系统的设计与实现 “便民服务 - 信息交互 - 事务管理” 的一体化平台【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/10 12:37:05

CUDA/NCCL/NVlink实现GPU之间的通信/GPU不同架构解读

CUDA解读 NCCL解读 NCCL 是 NVIDIA Collective Communications Library 的缩写 读法就是&#xff1a;妮蔻&#xff08;NCCL&#xff09; 参考视频&#xff1a; https://www.bilibili.com/video/BV1SWpXe2Epa/?spm_id_from333.337.search-card.all.click&vd_source132c…

作者头像 李华
网站建设 2026/6/9 7:31:14

2025大模型产品经理黄金元年:7阶段学习路线+免费资源包助你高薪转型_零基础转行大模型产品经理

本文揭示了2025年大模型产品经理的黄金机遇&#xff0c;详细介绍了转型所需的5大核心能力模型和零基础逆袭的7阶段学习路线&#xff0c;并通过真实案例展示成功路径。文章还附赠技术文档、实战项目和求职资源包&#xff0c;助力程序员和职场人士快速掌握大模型产品技能&#xf…

作者头像 李华