当前位置: 首页 > news >正文

Android系统-进程-Binder2-Java层

引言:

对于Android系统,一般是从java层到native层,再到kernel驱动层,形成一个完整的软件架构。Android系统中的Binder IPC通信机制的整体架构,从java层到底层驱动层是怎么样的一个架构和原理的呢?

概念与理解

Binder整体架构

图中红色代表整个Java层 binder架构相关组件:
Binder类代表Server端,BinderProxy类代码Client端;
图中蓝色代表Native层Binder架构相关组件;
上层Java层的Binder逻辑是建立在Native层架构基础之上的,核心逻辑都是交予Native层方法来处理。
java层中framework层的ServiceManager类与Native层的功能并不完全对应,framework层的ServiceManager类的实现最终是通过BinderProxy传递给Native层来完成的

Binder类图

图中浅蓝色都是Interface,其余都是Class:

ServiceManager:通过getIServiceManager方法获取的是ServiceManagerProxy对象; ServiceManager的addService, getService实际工作都交由ServiceManagerProxy的相应方法来处理;
ServiceManagerProxy:其成员变量mRemote指向BinderProxy对象,ServiceManagerProxy的addService, getService方法最终是交由mRemote来完成。
ServiceManagerNative:其方法asInterface()返回的是ServiceManagerProxy对象,ServiceManager便是借助ServiceManagerNative类来找到ServiceManagerProxy;
Binder:其成员变量mObject和方法execTransact()用于native方法
BinderInternal:内部有一个GcWatcher类,用于处理和调试与Binder相关的垃圾回收。
IBinder:接口中常量FLAG_ONEWAY:客户端利用binder跟服务端通信是阻塞式的,但如果设置了FLAG_ONEWAY,这成为非阻塞的调用方式,客户端能立即返回,服务端采用回调方式来通知客户端完成情况。另外IBinder接口有一个内部接口DeathDecipient(死亡通告)。

Binder类分层

整个Binder从kernel至,native,JNI,Framework层所涉及的全部类

源码走读:

 注册服务:

获取服务:

http://www.lryc.cn/news/121149.html

相关文章:

  • 体渲染原理及WebGL实现【Volume Rendering】
  • VUE3组件
  • 【iOS】autoreleasepool
  • 0基础学习VR全景平台篇 第80篇:Insta360 影石如何直播推流
  • 大语言模型之三 InstructGPT训练过程
  • ChatGPT在自动化报告和数据分析中的应用如何?
  • 面试热题(三数之和)
  • 在idea运行python文件
  • SQL - limit
  • 11. Redis基础知识
  • list模拟实现【引入反向迭代器】
  • 【华为OD机试】字符串变换最小字符串【2023 B卷|100分】
  • ARTS 挑战打卡的第8天 ---volatile 关键字在MCU中的作用,四个实例讲解(Tips)
  • 第二课-一键安装SD-Stable Diffusion 教程
  • Vue3 动态列 <el-table-column> 实现 formatter 的两种方法
  • 室温超导是什么?有哪些应用场景?
  • Windows+VMware+Ubuntu+Anaconda+VMware Tools
  • Xray配置文件详解
  • flink优化
  • docker: ERROR: Couldn‘t connect to Docker daemon at http+docker://localhost
  • 大模型在金融医疗、生命系统和物理仿真领域的创新应用探索
  • tensorflow / tensorflow-gpu cuda cudNN tensorRT 安装,启用显卡加速
  • 计算机视觉中的Transformer
  • UVA-1601 万圣节后的早晨 题解答案代码 算法竞赛入门经典第二版
  • nacos 403错误
  • Python遥感图像处理应用篇(三十四):GDAL+Scikit-image+GLCM计算遥感图像纹理特征
  • solr迁移到另一个solr中(docker单机)
  • 谁能讲清楚Spark之Spark系统架构
  • 力扣:59. 螺旋矩阵 II(Python3)
  • 【electron】electron项目创建的方式: