Android binder架构解析
不仅于此,此外,整个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层所涉及的类如下:
Android binder架构解析相关推荐
- android输入法架构解析
android输入法架构解析 简介: 前阵子接手维护了一个密码键盘的项目,之前还没有接触过android输入法这块的知识点,所以在熟悉项目的同时将android系统输入法实现框架整理了一遍,记录在此. ...
- Android Binder 全解析(1) -- 概述
摘要 如果各位玩过<炉石传说>,那么可能对法师的职业卡「不稳定的传送门」很有印象,特别是没有欧洲玩家,经常能够拿到其他职业的强力单卡.Android 也提供了传送门,让我们可以像使用本地方 ...
- Android Treble架构解析
本文主要介绍Treble架构下的HAL&HIDL&Binder相关技术原理.Treble的详细资料文档,请参考Treble 官方文档. 1. Treble 简介 Android 8.0 ...
- 13.学习Camera之——Android Treble架构解析
本文主要介绍Treble架构下的HAL&HIDL&Binder相关技术原理. 1. Treble 简介 Android 8.0 版本的一项新元素是 Project Treble.这是 ...
- 理解Android Binder机制(3/3):Java层
本文是Android Binder机制解析的第三篇,也是最后一篇文章.本文会讲解Binder Framework Java部分的逻辑. Binder机制分析的前面两篇文章,请移步这里: 理解Andro ...
- iOS vs Android 系统架构
iOS是基于UNIX内核,Android是基于Linux内核,iOS和android作为两款优秀的手机操作系统,他们有共性有区别. iOS的系统架构 分为四个层次: 核心操作系统层(Core OS l ...
- Android Binder机制(1):Binder架构分析
从这篇博客开始,将进入Binder机制的分析系列,顺序是先讲解Binder机制的框架,理解了整体思想后,再深入分析各层的细节实现,最后会实现一个自己的本地服务. 1.Binder的历史 BeOS是Be ...
- android Binder机制(一)架构设计
Binder 架构设计 Binder 被设计出来是解决 Android IPC(进程间通信) 问题的.Binder 将两个进程间交互的理解为 Client 向 Server 进行通信. 如下:bind ...
- Android系统架构基本模式解析
Android系统架构总共被分为四层,在这里大家就可以通过介绍对这四个层次进行一个深入的解读,以加深大家对这一系统的认识. 如今,大家面对市场中种类繁多的手机必然挑的眼花缭乱.不过,在智能手机占据主要 ...
最新文章
- OHSUMED数据集介绍
- flash FMS的一些最优参数设置
- 马哥linux视频的学习笔记
- CentOS获取软件安装包源码
- 我的一些关于商业计划书的经验 (AC)
- 【转】无线路由器密码破解
- 使用微信小程序生成海报
- 如何保证MQ消息队列的高可用
- Python 与金融科技2|数据的滑动平均值及多图可视化
- 会议论文参考文献格式(待更新)
- Python办公自动化——批量发送邮件
- 植物大战僵尸存档任务C1-01
- python远程监控服务器多个日志_flume远程监控一个文件
- Win10安装Docker和k8s
- 招商银行信用卡中心2018秋招数据方向笔试题
- 记录谷歌gn编译时碰到的一个错误“I could not find a “.gn“ file ...”
- 三相直流电机-利用反电动势的过零点来测转子位置在讨论无转子位置
- 【Day3】【纪中OJ】2019.1.25C组每日总结
- html5魔塔编辑器安卓版,Mota: 纪元魔塔前传。童年魔塔记忆。使用手机编写的5000行代码...
- 工作流引擎Synchro Flow的流程度量
热门文章
- 国产软件爆发 中国版Navicat,SQL Studio成数据库管理工具热门
- 建筑地基基础工程施工规范
- 【C_Game001_三子棋】
- pdf 文档 搜索 服务器,福昕PDF搜索工具_PDF文档索引与检索_福昕软件官网
- 苹果悬浮球_谁说苹果手机的悬浮球不好用的!那是你没有了解它的真正用法
- Android面试从新手到架构师,一篇解析就够(1),跳槽字节跳动
- 网络计算机显示器接口,显示器的接口都有什么用
- Vue数据代理+事件处理+事件修饰符的作用+计算属性的使用,尚硅谷Vue系列教程学习笔记(2)
- 史上最全脉搏心率传感器PulseSensor资料(电路图+中文说明书+最全源代码)
- 将xls文件转化为xlsx文件