太强了,大厂技术总监亲码“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实现进程间通信流程

目录:

一、学习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

相关面试题解答

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端不用休眠等待驱动返回数据。

更多Android可以查看我的个人介绍!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容