Android系统中,多进程间的通信都是依赖于底层Binder IPC机制,Binder机制是一种RPC方案,因为binder的功能就是在本地“执行”其他进程的功能。例如:当进程A中的Activity与进程B中的Service通信时,就使用了binder机制。为了完成进程间的通信,binder使用AIDL来描述进程间的接口。

不仅于此,此外,整个Android系统架构中,采用了大量的binder机制。

1.1 binder通信机制

Android中的Binder通信采用C/S架构,从组件视角来说,包含Client、Server、Service Manager以及binder驱动,其中Service Manager用于管理系统中的各种服务。Binder整体通信架构如下图所示:

(1)注册服务(addService):Server进程要先注册Service到Service Manager。该过程:Server是客户端,Service Manager是服务端;

(2)获取服务(getService):Client进程使用某个Service前,须先向Service Manager中获取相应的Service。该过程:Client是客户端,Service Manager是服务端;

(3)使用服务:Client根据得到的Service信息建立与Service所在的Server进程通信的通路,然后就可以直接与Service交互。该过程:client是客户端,server是服务端。

1.2 binder架构

Android源码中,binder的核心库是在native层实现,但在Java层和native层都有接口供应用程序使用。Binder架构图如下:

(1) binder驱动层

Android因此添加了binder驱动,其设备节点为/dev/binder,主设备号为10,binder驱动程序在内核中的头文件和代码路径如下:

kernel/drivers/staging/binder.h

kernel/drivers/staging/binder.c

binder驱动层的主要作用是完成实际的binder数据传输。

(2) binder adapter层

主要是IPCThreadState.cpp和ProcessState.cpp,源码位于frameworks/native/libs/binder目录下,这两个类都采用了单例模式,主要负责和驱动直接交互。

a、ProcessState负责打开binder设备,进行一些初始化设置并做内存映射;

b、IPCThreadState负责直接和binder设备通信,使用ioctl读写binder驱动数据。

(3) Binder核心层

Binder核心层主要是IBinder及它的两个子类,即BBinder和BpBinder,分别代表了最基本的服务端及客户端。源码位于frameworks/native/libs/binder目录下。

binder service服务端实体类会继承BnInterface,而BnInterface会继承自BBinder,服务端可将BBinder对象注册到servicemananger进程。

客户端程序和驱动交互时只能得到远程对象的句柄handle,它可以调用调用ProcessState的getStrongProxyForHandle函数,利用句柄handle建立BpBinder对象,然后将它转为IBinder指针返回给调用者。这样客户端每次调用IBinder指针的transact方法,其实是执行BpBinder的transact方法。

(4) Binder框架层

a、Native Binder框架层包含以下类(frameworks/native/libs/binder):IInterface,BnInterface,BpInterface,等。

b、Java框架层包含以下类(frameworks/base/core/java/android/os):

IBinder,Binder,IInterface,ServiceManagerNative,ServiceManager,BinderInternal,IServiceManager,ServiceManagerProxy

Java框架层的类的部分方法的实现在本地代码里(frameworks/base/core/jni)。

1.3 binder分层

Java(App) framework层的binder采用JNI技术来调用native(C/C++ framework)层的binder架构,从而为上层应用程序提供服务。

native层中,binder是C/S架构,分为Bn端(Server)和Bp端(Client),而java层binder在命名与架构上与其非常相近,同样在也实现了一套IPC通信架构。需要注意的是Java(App) framework层的Binder是建立在Native层架构基础之上的,核心逻辑都是交予Native层方法来处理。

图中红色代表整个Java(App) framework层binder架构相关组件;Binder类代表Server端,BinderProxy类代表Client端;

图中蓝色代表Native层Binder架构相关组件;

Java(App) framework层的Service Manager类与Native层的功能并不完全对应,java层的Service Manager类的实现最终是通过BinderProxy传递给Native层来完成的。

1.4 Binder类分层

整个Binder从kernel至,native,JNI,Framework层所涉及的类如下:

来源: http://blog.csdn.net/tfygg/article/details/51626632

Android binder架构解析相关推荐

  1. android输入法架构解析

    android输入法架构解析 简介: 前阵子接手维护了一个密码键盘的项目,之前还没有接触过android输入法这块的知识点,所以在熟悉项目的同时将android系统输入法实现框架整理了一遍,记录在此. ...

  2. Android Binder 全解析(1) -- 概述

    摘要 如果各位玩过<炉石传说>,那么可能对法师的职业卡「不稳定的传送门」很有印象,特别是没有欧洲玩家,经常能够拿到其他职业的强力单卡.Android 也提供了传送门,让我们可以像使用本地方 ...

  3. Android Treble架构解析

    本文主要介绍Treble架构下的HAL&HIDL&Binder相关技术原理.Treble的详细资料文档,请参考Treble 官方文档. 1. Treble 简介 Android 8.0 ...

  4. 13.学习Camera之——Android Treble架构解析

    本文主要介绍Treble架构下的HAL&HIDL&Binder相关技术原理. 1. Treble 简介 Android 8.0 版本的一项新元素是 Project Treble.这是 ...

  5. 理解Android Binder机制(3/3):Java层

    本文是Android Binder机制解析的第三篇,也是最后一篇文章.本文会讲解Binder Framework Java部分的逻辑. Binder机制分析的前面两篇文章,请移步这里: 理解Andro ...

  6. iOS vs Android 系统架构

    iOS是基于UNIX内核,Android是基于Linux内核,iOS和android作为两款优秀的手机操作系统,他们有共性有区别. iOS的系统架构 分为四个层次: 核心操作系统层(Core OS l ...

  7. Android Binder机制(1):Binder架构分析

    从这篇博客开始,将进入Binder机制的分析系列,顺序是先讲解Binder机制的框架,理解了整体思想后,再深入分析各层的细节实现,最后会实现一个自己的本地服务. 1.Binder的历史 BeOS是Be ...

  8. android Binder机制(一)架构设计

    Binder 架构设计 Binder 被设计出来是解决 Android IPC(进程间通信) 问题的.Binder 将两个进程间交互的理解为 Client 向 Server 进行通信. 如下:bind ...

  9. Android系统架构基本模式解析

    Android系统架构总共被分为四层,在这里大家就可以通过介绍对这四个层次进行一个深入的解读,以加深大家对这一系统的认识. 如今,大家面对市场中种类繁多的手机必然挑的眼花缭乱.不过,在智能手机占据主要 ...

最新文章

  1. OHSUMED数据集介绍
  2. flash FMS的一些最优参数设置
  3. 马哥linux视频的学习笔记
  4. CentOS获取软件安装包源码
  5. 我的一些关于商业计划书的经验 (AC)
  6. 【转】无线路由器密码破解
  7. 使用微信小程序生成海报
  8. 如何保证MQ消息队列的高可用
  9. Python 与金融科技2|数据的滑动平均值及多图可视化
  10. 会议论文参考文献格式(待更新)
  11. Python办公自动化——批量发送邮件
  12. 植物大战僵尸存档任务C1-01
  13. python远程监控服务器多个日志_flume远程监控一个文件
  14. Win10安装Docker和k8s
  15. 招商银行信用卡中心2018秋招数据方向笔试题
  16. 记录谷歌gn编译时碰到的一个错误“I could not find a “.gn“ file ...”
  17. 三相直流电机-利用反电动势的过零点来测转子位置在讨论无转子位置
  18. 【Day3】【纪中OJ】2019.1.25C组每日总结
  19. html5魔塔编辑器安卓版,Mota: 纪元魔塔前传。童年魔塔记忆。使用手机编写的5000行代码...
  20. 工作流引擎Synchro Flow的流程度量

热门文章

  1. 国产软件爆发 中国版Navicat,SQL Studio成数据库管理工具热门
  2. 建筑地基基础工程施工规范
  3. 【C_Game001_三子棋】
  4. pdf 文档 搜索 服务器,福昕PDF搜索工具_PDF文档索引与检索_福昕软件官网
  5. 苹果悬浮球_谁说苹果手机的悬浮球不好用的!那是你没有了解它的真正用法
  6. Android面试从新手到架构师,一篇解析就够(1),跳槽字节跳动
  7. 网络计算机显示器接口,显示器的接口都有什么用
  8. Vue数据代理+事件处理+事件修饰符的作用+计算属性的使用,尚硅谷Vue系列教程学习笔记(2)
  9. 史上最全脉搏心率传感器PulseSensor资料(电路图+中文说明书+最全源代码)
  10. 将xls文件转化为xlsx文件