博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Binder IPC
阅读量:7297 次
发布时间:2019-06-30

本文共 1463 字,大约阅读时间需要 4 分钟。

本文整理自: 《》

首先:启动属于不同进程的Activity会触发多次Application的onCreate():

##IPC原理 注意是IPC原理,不是BINDER原理:

每个Android的进程,只能运行在自己进程所拥有的虚拟地址空间。对应一个4GB的虚拟地址空间,3GB是用户空间,1GB是内核空间,当然内核空间的大小是可以通过参数配置调整的。其中用户空间,不同进程之间彼此是不能共享的,而内核空间却是可共享的。那么Client进程向Server进程通信,需要依赖两个进程可共享的内核空间。Client端与Server端进程的交互可通过ioctl等方法来进行通信交互。

也就是说,由于进程之间的用户空间是不共享的,Binder是通过共享的内核空间来进行通信的(所有的IPC都是如此)。

BINDER原理

从图中可以看出无论是注册服务,还是获取服务都离不开Service Manager。ServiceManager是整个Binder通信机制的大管家,是Binder的守护进程

当Service Manager启动之后,Client端和Server端通信时都需要先获取Service Manager接口,才能开始通信服务。

BpBinder和BBinder的区别

ServiceManager的作用

servicemanager的核心工作就是注册服务和查询服务。

ServiceManger的启动

由init进程调用init.rc启动。当年做安全的时候知道,只要是init进程启动的服务是不能被结束的,init进程fork出来的子进程也是,参考。

所以说,开机启动过程中会初始化系统的各种Service,并将这些Service向ServiceManager注册。

ServiceManager是由init进程通过解析init.rc文件而创建的,其所对应的可执行程序/system/bin/servicemanager,所对应的源文件是service_manager.c,进程名为/system/bin/servicemanager。

下面三行代码是调用WindowManger实现浮动窗口部分代码。

WindowManager wm = (WindowManager)getSystemService(getApplication().WINDOW_SERVICE);  View view=LayoutInflater.from(getApplication()).inflate(R.layout.float_layout, null);  wm.addView(view, layoutParams);复制代码

这三行代码就对应了注册(addService)、获取(getService)和使用服务的三个过程。第三行是调用了运行在systemServer进程上的WindowManger的addView函数。

注册服务

服务注册过程(addService)核心功能:在服务所在进程创建binder_node,在servicemanager进程创建binder_ref。 其中binder_ref的desc再同一个进程内是唯一的:

请求服务

请求服务(getService)过程,就是向servicemanager进程查询指定服务,当执行binder_transaction()时,会区分请求服务所属进程情况。

转载于:https://juejin.im/post/5a313408f265da43248072d4

你可能感兴趣的文章
iconfont字体图标
查看>>
AndroidStudio下加入百度地图的使用 (三)——API基本方法及常量属性
查看>>
二、2、上传成功也不一定得到flag哦!
查看>>
火狐浏览器设置placeholder的时候记得改opacity
查看>>
Mina学习
查看>>
java通过句柄访问对象
查看>>
extern "C"与C++中的C函数调用(4)—— 如何在C中调用C++函数
查看>>
计算几何 模板
查看>>
“The Psychology of Cross Country”笔记
查看>>
10 Web Apps for Developers 为开发者提供的10款Web应用程序
查看>>
python之正则表达式
查看>>
Shell命令-文件及目录操作之touch、tree
查看>>
修改K/3 Cloud管理中心端口
查看>>
C#语言课程11月7日
查看>>
linux日常1-踢出用户
查看>>
MFC多文档应用程序同时显示两个视图
查看>>
github快速入门(一)
查看>>
PHP全栈开发(八):CSS Ⅸ dispaly & visibility
查看>>
正则表达式
查看>>
【Oracle 12c】最新CUUG OCP-071考试题库(56题)
查看>>