news 2026/9/12 8:54:21

太强了,大厂技术总监亲码“Android Binder原理”,知乎已1.3k赞,不吃透都对不起他

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
太强了,大厂技术总监亲码“Android Binder原理”,知乎已1.3k赞,不吃透都对不起他

1.为什么需要了解多进程呢?

其实一般项目我们都接触不到这个,我现在项目也接触不到,但是作为一个小咸鱼还是得有点小梦想,毕竟大公司的大项目不少都是多进程,所以基于此我们还是要了解的。(下面的图都是网上找来的)

2.进程间通信方式

进程间通信方式有蛮多种,比如通过共享内存、Socket、管道啊等等,但是我们作为安卓开发并不会采用这些(而且这块我也不懂,后续如果需要再研究呗),安卓中使用的是binder。至于区别,如下图。

用binder的优势:

  • 1.拷贝只需要一次,虽然有不需要拷贝的通信机制,但是就会涉及到信息资源时刻同步,这个是很耗性能的,而且控制极其复杂,易用性也差

  • 2.安全,因为为每个app分配UID(可以看作是应用的身份证)。

3.内存划分

想知道怎么传输数据的,需要先了解内存划分

4.Binder与传统IPC如何传输数据的呢?

binder与传统ipc(进程间通信机制)对比
传统ipc传输数据流程
一次拷贝:服务端一块空间(虚拟内存)跟内核空间(虚拟内存)通过MMP映射到同一块物理内存
无需拷贝:发送端、接收端、共享区域映射到同一块物理内存.(会涉及到各种信息资源同步,导致控制复杂、易用性差)

5.上层通过AIDL、底层通过Binder实现安卓端的进程通信,AIDL实现进程间通信流程

看了这些图大家可能还是没有深入理解,正好我最近薅到一份《Android Binder原理学习笔记》,集合了「Linux、C/S架构、ServiceManager、ProcessState、系统服务的注册过程、ServiceManager的启动过程、系统服务的获取过程、MediaPlayerService、JNI、Binder类的注册、AMS、JavaBBinder」等N多技术点。

目录:

一、学习Binder前必须要了解的知识点
二、ServiceManager中的Binder机制
三、系统服务的注册过程
四、ServiceManager的启动过程
五、系统服务的获取过程
六、Java Binder的初始化
七、Java Binder中系统服务的注册过程

一、学习Binder前必须要了解的知识点

1.Linux和Android的IPC机制种类
2.Linux和Binder的IPC通信原理
3.为什么要使用Binder
4.为什么要学习Binder?

二、ServiceManager中的Binder机制

1.基于Binder通信的C/S架构
2.MediaServer的main函数
3.每个进程唯一的ProcessState
4.ServiceManager中的Binder机制

三、系统服务的注册过程

1.从调用链角度说明MediaPlayerService是如何注册的
2.从进程角度说明MediaPlayerService是如何注册的

四、ServiceManager的启动过程

1.ServiceManager的入口函数
1.1 打开binder设备
1.2 注册成为Binder机制的上下文管理者
1.3 循环等待和处理client端发来的请求

五、系统服务的获取过程

1.客户端MediaPlayerService请求获取服务
2.服务端ServiceManager处理请求

六、Java Binder的初始化

1.Java Binder的JNI注册
1.1 Binder类的注册
1.2 BinderInternal类的注册

七、Java Binder中系统服务的注册过程

1.将AMS注册到ServiceManager
1.1 BinderInternal.getContextObject()
1.2 ServiceManagerNative.asInterface()
1.3 getIServiceManager().addService()

2.引出JavaBBinder
3.解析JavaBBinder
4.Java Binder架构

深入解析Binder源码

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是浮于表象,这对我们的知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读Android系统源码,还包括各种优秀的开源库。

所以这里为大家整理了Android开发相关源码精编解析,其中关于Binder的源码解析内容:

第一节 Binder 系列—开篇
第二节 Binder Driver 初探
第三节 Binder Driver 再探
第四节 Binder 启动 ServiceManager
第五节 获取 ServiceManager

由于篇幅原因,以上完整版资料PDF如有需要,可以 点赞+评论 支持下我,然后点击文末CSDN官方认证微信卡片免费阅读下载。

相关面试题解答

1、你是否了解Binder机制?

从手机启动过程中的一些进程阐述
Binder分层架构图
Binder的oneway和非oneway数据传递图
Binder的优缺点: 性能(拷贝一次)、安全(校验UID、PID)

2、Binder这么好用,那为什么Zygote的IPC通信机制用Socket而不用Binder?

如果用了binder,zygote要先启动binder机制,打开binder驱动,获得描述符,mmap进程内存映射,注册binder线程,还要创建一个binder对象注册到serviceManager,另外AMS要想zygote发起创建应用进程请求的话,要先从serviceManager查询zygote的binder对象,再发起binder调用,非常繁琐。

相比之下,zygote和systemserver本就是父子关系,对于简单的消息通信,用管道或者socket非常方便。

如果zygote用了binder机制,再fork systemServer,那systemServer就继承了zygote的描述符和映射的内存,这两个进程在binder驱动层就会共用一套数据结构,这肯定是不行的。那还得把旧的描述符关掉,再重新启动一遍binder机制,自找麻烦。

3、为什么说Binder是安全的?

在数据传输过程中有身份的校验,通过UID、PID进行校验

4、Intent跨进程传大图为什么会崩溃?

常规的intent传递数据,在startActivity时将Bundle的 allowFds 设置成了false, 然后就会将 Bitmap直接写到 Parcel 缓冲区。如果通过 bundle.putBinder形式传递Bitmap,会开辟一个块共享匿名内存用来存Bitmap的数据,而Parcel 缓冲区只是存储 FD 。

5、AIDL的oneWay和非oneway有什么区别?

oneway和非oneway的架构图,oneway server端是串行处理,异步调用,Client端不用休眠等待驱动返回数据。

文中资料点击文末CSDN官方认证微信卡片免费阅读下载↓↓↓

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

Android面试的碎碎念

在今年8月份入职了一家外企,恰逢最近几周公司大规模招聘Android开发,有幸参与了十几场面试,遂有感而发。在其中也从面试官的方面有了一些想法,希望分享给大家。 本来当做面试官对于我来说是一件比较新奇的事,但通过几场…

作者头像 李华
网站建设 2026/8/30 8:34:59

计算机扫盲:电脑健康体检:

摘要:本文以刚子的电脑体检为主线,系统讲解如何全面检查电脑健康状况。内容涵盖硬盘健康(使用CrystalDiskInfo查看S.M.A.R.T.信息、判断SSD写入寿命)、电池健康(通过Windows自带powercfg生成电池报告、计算健康度&…

作者头像 李华
网站建设 2026/8/30 16:45:30

五常大米批发商怎么选:裕道府五常大米品质、供货与合作场景分析

# 五常大米批发商怎么选:裕道府五常大米品质、供货与合作场景分析 ## 一、摘要:从“买到好米”走向“稳定采购” 对于家庭消费者,五常大米的选择通常集中在产地、口感和包装;对于粮油渠道商、集采服务商、电商平台选品方及企业采购…

作者头像 李华
网站建设 2026/9/2 7:25:32

写码如写诗,Android代码规范有多重要?附阿里《Android代码规范指南》PDF

前言 所谓无规矩不成方圆。任何团队,规范都是怎么也绕不开的话题。特别是在我们编程行业,代码规范乃是团队的重中之重。我们有太多的理由去做规范,同时我们在做规范这件事上也有太多的痛点。 随着团队人数的增加,每个人的代码编写…

作者头像 李华
网站建设 2026/8/30 9:13:16

MATLAB实现马尔可夫链:从原理到应用(天气预测、PageRank、文本生成)

1. 项目概述:从“随机漫步”到“状态转移”如果你曾经尝试预测明天的天气、分析股票价格的波动,或者研究一个用户在网站上的点击流,那么你已经在不自觉地思考一个核心问题:如何描述一个未来状态依赖于当前状态,而与过去…

作者头像 李华