Android系统binder机制的研究分析

摘要:
活页夹是Android系统中非常重要的传输方法。我公司的进程间通信之前使用了活页夹方法。以前,我只知道如何使用和理解它。最近,当手头的事情结束时,我决定对其机制进行一些研究。这是我的分析结果。请给我更多关于错误的建议。所谓的绑定器是在Android系统中创建的进程间通信机制。4、 绑定器的总体定时如下:1.服务器在ServiceManger打开时向其注册。

binder是安卓系统中非常重要的传输方法,笔者之前所在公司进程间通信采用的都是binder方法,之前笔者只是会用,能看懂,最近趁着手头的事情告一段落,决定对它的机制做了一番研究,以下就是我的分析成果,不对之处,请各位大神多多指教。

  一、为什么要用binder

  二、binder的原理

  三、binder的结构

  四、binder传输时序

  五、总结

  一、为什么要用binder

    首先在说binder结构之前,我们要说一下我们为什么要用binder。要回答这个问题,我们先简单说一下binder是什么。所谓binder,就是在Android系统中所创造出来的一种进程间的通信机制。通过这样一种通信机制,我们可以实现进程间通信,那么有人可能要问进程间通信有很多,比如管道,消息队列等等。binder有什么读到之处吗?有的,最大的不同就在于其他的所有消息队列他们都是取了两次数据,即放入了一次,取出了一次,而binder的话只需要传递一次就可以了,这是binder的非常神奇的地方。

  二、binder的原理

    以32位总线为例,我们的虚拟内存是4G,创建完成之后,有3G是给了用户层,1G给了内核,其中内核是连接各个进程之间的,可以进行通信,所以binder就是利用了这一点。

  三、binder的结构

    binder的结构主要分成三大部分,分别是客户端(获取数据的部分),ServiceManager(管理部分),服务端(提供数据的部分)。

  四、binder的传输时序

    binder的总体时序如下:

      1、开机时候服务端对ServiceManger端进行注册。

      2、调用的时候ServiceManager端会给客户端创建一个代理

      3、客户端向代理提出一个获取相应服务的请求,代理通过ServiceManager端将其发送到服务端

      4、服务端经过处理后将结果返回给客户端代理

      5、客户端处理该请求

  所以其时序可以分成两部分,第一部分就是开机时候服务端对ServiceManager端进行注册

                 第二部分就是客户端向服务端提出请求

      第一部分:1、判断当前服务时候注册进入

           2、如果有不用注册

             3、如果没有创建一个新的服务端,并将其放到链表中

             4、通知binder驱动注册成功。

      第二部分:这一部分也可以分成两部分,第一部分为创建代理过程,第二部分为客户端发送请求过程

             第一:ServiceManager——Processstate——BPbinder

             第二:客户端——BPbinder——ProcessState——IPCThread——binder驱动——ServiceManager(函数调用)——getService——transnt——服务端——进入死循环——ontransnt函数

  五、总结

      binder主要利用了内核层的传输通道,其中间有ServiceManager进行管理,但是该服务却又不介入客户端和服务器中间,客户端直接向服务器申请数据,这就是binder驱动的奥妙所在。

  PS:本部分是该系列的第一章,大概讲了一个架子,里面的具体内容留待以后在讲,谢谢。

       

免责声明:文章转载自《Android系统binder机制的研究分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇用批处理企业微信双开JMeter学习(十九)JMeter测试MongoDB下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

智能打印SDK-源码剖析

 演示站点+源码 均在github  迁徙至github: https://github.com/micro-chen/WebPrinter  智能打印SDK-官方群 547747202 -----------------过时--------------- 开源地址:http://www.dnnode.com/ 软件下载地址:http://www.dnno...

Linux 系统编程 学习:3-进程间通信1:Unix IPC(2)信号

背景 上一讲我们介绍了Unix IPC中的2种管道。 回顾一下上一讲的介绍,IPC的方式通常有: Unix IPC包括:管道(pipe)、命名管道(FIFO)与信号(Signal) System V IPC:消息队列、信号量、共享内存 Socket(支持不同主机上的两个进程IPC) 我们在这一讲介绍Unix IPC,中有关信号(Signal)的处理。...

rs485多主

因复位时I/O口都输出高电平。如果把I/O口直接与RS-485接口芯片的驱动器使能端DE端相连,会在CPU复位其间DE为高,从而使本节点处于发送状态。如果此时总线上其它节点在发送数据,则此次数据传输将被打断而失败,甚至引起整个总线因某个节点的故障而通信阻塞,继而影响整个系统的正常运行。为了做到通信避障,考虑系统工作稳定性,在每个节点的设计中应将控制RS-4...

转载 Android之网络与通信

2.三种网络接口简述2.1标准Java接口java.net.*提供与联网有关的类,包括流和数据包套接字、Internet协议、常见HTTP处理。使用java.net.*包连接网络代码:Java代码 收藏代码try{ //定义地址 URL url=newURL("http://www.google.com"); //打开连接 HttpURLConn...

Chrome 扩展crx开发

Chrome扩展提供的入口 左键 crx,popup 右键 crx,homelink + option 右键上下文菜单 Chrome扩展的文件结构 Chrome扩展就是一个文件夹下包括一堆符合规范的文件。首先是清单文件manifest.json,指定了该扩展的整体布局和结构。实例: { // 清单文件的版本,这个必须写,而且必须是2 "mani...

【Chromium中文文档】跨进程通信 (IPC)

跨进程通信 (IPC) 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Inter-process_Communication.html 全书地址 Chromium中文文档 for https://www.chromium.org/...