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_handler);
	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怎么具体进行通信写一个实际的例子进行应用学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值