Android Binder机制

  • 时间:
  • 浏览:0

注意此时客户端和服务端操作的是同有一2个对象.

非基本类型的参数,还要使用 in,out,inout来标记. 该标记表示数据的流向.

服务端的Binder指的是Binder的本地对象

客户端的Binder指的是Binder代理对象,它就说 Binder本地对象的有一2个远程代理.

说明 :

binder使用内存映射(mmap)来实现守护进程间传递数据,比较传统的守护进程间通信.

服务端使用的类-->Stub:

注意,客户端的调用守护进程会在等待服务端调用之前 之前 之前 刚开始,得到数据返回

该办法是在客户端和服务端没得同有一2个守护进程中,才会被调用.用于传递客户端定位办法和参数.

该办法是在binder驱动中binder守护进程池分配的有一2个守护进程中运行,服务端都还要接收到客户端传来的办法参数和定位到调用的办法.

服务端在根据那此参数,来调用真实的服务端数据接口.

代理对象的数据接口实现:

都还要看出, aidl 是非还要的, 我希望我们都都 儿儿此人 编写 IUserManager接口,才能过实现binder跨守护进程通信的功能.

out 表示从服务端流向客户端的数据.

到此,对 aidl进行编译,会得到一份自动生成的IUserManager.java文件.

至此, binder机制的运转流程肯能很明了了.

onTransact()办法 :

binder只还要进行一次的数据拷贝(copy_from_user()).

Binder通信

客户端通过Stub的静态办法asInterface来获取数据接口:

Binder驱动

模型原理图

接下来分析,这份自动生成的文件内容.

Stub是有一2个继承IBinder和实现 数据接口的抽象办法.

还要注意的是 非基本类型的数据,还要使用import导入,不管与否在同有一2个包中.

Binder简介

请看 完整版的实现:

getUserById(long id)办法 :

通过aidl自动生成的java类来分析binder机制.

Stub.asInterface() :

您应该将方向限定为真正还要的方向,肯能编组参数的开销极大。

注意此时客户端和服务端操作的都不 同有一2个对象.

in 表示从客户端流向服务端的数据.

服务端还要实现该办法,来创建有一2个真正的binder对象.

传统守护进程通信还要经过两次数据拷贝(copy_from_user(),copy_to_user())