IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android binder -> 正文阅读

[移动开发]Android binder

Android binder 理解


前言

binder对于android开发的同学来说既陌生又熟悉,但是要真正理解还是需要进一步深入的了解它的原理


一、IPC,RPC理解

IPC Inter-Process Communication字面理解就是进程通信,简单来说就是两个进程之间交互信息的通道,负责数据的传输。
简单示意图:
A进程  --------------IPC------------B进程

RPC Remote Procedure Call远程过程调用,而不是直接通信,但是也依赖于IPC之上来建立通信。
在这里插入图片描述如图我们可以这里理解类似进程A操控硬件依赖IPC通道进行数据传输给B控制的硬件,该硬件进行数据的接受方的这一过程称之为RPC

二、IPC数据传输组成

如下图:
在这里插入图片描述数据组成一般分为三部分
一、源,就是发送方这里是进程A
二、目的,就是让接收方收到,这里就需要让进程B在ServiceManager里注册服务以便于进程A在ServiceManager里面搜索到这个服务从而获得一个指向进程B的handle
三、数据,一般就是双方约定的数据


三、android中binder模型

在这里插入图片描述在android中可以这样理解进程A就是client,进程B为Server,他们中间有个ServiceManager来注册和查询管理服务,他们通信通过底层binder驱动
在这里插入图片描述接下来我们来看一下各个进程需要干的活,这个和之前分析的基本一致

四、android源码结合认知过程

在源码里可以去native\cmds\servicemanager里查看
service_manager.c、bctest.c、binder.c这几个c文件中可以进行验证。
service_manager.c里面流程解析

binder_open
binder_become_context_manager 
binder_loop(bs,svcmgr_hander)
	ioctl 读取数据
	binder_parse 解析数据
		处理方法:svcmgr_hander通过传入的code进行注册或者查询获得相应发服务操作

bctest.c里面流程解析
注册服务

binder_open
binder_call(bs,&msg,&reply,target,SVC_MGR_ADD_SERVICE)
//msg 包含服务名称
//reply 包含service_manager回复数据
//target 0表示发送给service_manager
//SVC_MGR_ADD_SERVICE 就是上面的传入的code来执行对应操作

获取服务

binder_open
binder_call(bs,&msg,&reply,target,SVC_MGR_CHECK_SERVICE)
//msg 包含服务名称
//reply 包含service_manager回复数据-提供服务的进程
//target 0表示发送给service_manager
//SVC_MGR_CHECK_SERVIC 就是上面的传入的code来执行对应操作

发现注册和获取服务所调用的方法其实是一样的只是行为目的不一样所以传的参数和返回值不同而已

总结

看了源码以后也基本验证的了所有进程执行的逻辑和流程,接下来就是对cs怎么具体进行通信写一个实际的例子进行应用学习

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:24:09  更:2021-09-29 10:25:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 12:02:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码