尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

太强了,大厂技术总监亲码“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.为什么要使用Binder4.为什么要学习Binder?二、ServiceManager中的Binder机制1.基于Binder通信的C/S架构2.MediaServer的main函数3.每个进程唯一的ProcessState4.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注册到ServiceManager1.1 BinderInternal.getContextObject()1.2 ServiceManagerNative.asInterface()1.3 getIServiceManager().addService()2.引出JavaBBinder3.解析JavaBBinder4.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如果用了binderzygote要先启动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官方认证微信卡片免费阅读下载↓↓↓
返回列表