Android camera系统开发之IPC (一)

来源:互联网 发布:工业设计需要什么软件 编辑:程序博客网 时间:2024/05/16 07:19

Android使用Binder机制来实现IPC, Binder通信是借助linux的binder driver来实现的,两个进程间IPC感觉就象是一个进程进入另一个进程执行代码一样,而且在本地能返回远端函数的返回结果。Binder的用户空间为每一个进程维护着一个可用的线程池,线程池用来处理到来的调用请求的消息,包括请求的消息,和远端响应的消息。

Android中的Binder通信是基于Service与Client的架构,所有需要IBinder通信的进程都必须创建一个IBinder接口,系统中有一个系统服务管理器,这是个特殊的服务器,Android 初始化的时候就会自动起来,并来为其他应用服务器提供服务,包括增加某一服务,查询获取某一服务等。

 那么针对我们的Camera 系统,我们要有以下四个概念,

1 系统服务管理器  service_manager

2 Camera服务器   CameraService

3 Camera 客户端   Camera app.

4 Binder  驱动核   Binder Driver

 

大概的过程简述如下:

     Android 系统初始化后运行系统服务管理器,系统服务管理器等待并响应Camera 应用服务器的注册请求,这样Camera 应用服务器将告诉系统服务器可以提供Camera 的应用服务,系统服务管理器同时在Binder Driver给生成一个Binder号

   Camera 应用获取Camera 服务句柄,也就是那个Biner号,有这个Binder,系统就可以通过一种机制对应到Camera 服务。Camera应用通过这个Binder,在本地调用Camera服务提供的函数(即服务),通过IPC操作,对应到Camera服务器端对应的函数中,比如connect(),这时Camera应用在这个点将挂起,Camera服务将被唤醒执行这个服务connect(),在Camera服务器端执行完成后,再反馈结果给Camera应用,Camera应用在这时又被唤醒并继续往下执行.就好像Camera应用调用connect()是在本地完成一样.

以上过程可以分成以下流程来理解,

一,系统服务管理器service_manager启动。在Binder驱动核中注册一个特殊节点0,并等待其他服务来注册,查询。

二, Camera服务器注册/添加到系统服务管理器中,在系统服务管理器service_manager中将生成一个Binder号(x)给Camera服务器。

三,  Camera客户端向系统服务管理器service_manager获取一个Camera服务代理。系统服务器将返回那个生成的Binder号 (x)给这个Camera客户端,并转化为ICameraService对象。

四, Camera客户端通过ICameraService接口中的函数 [比如connect()]调用,中途经过IPC操作,调用到Camera服务器中的CameraService::connect(),并把结果反馈给Camera客户端,

后续将按照以上流程来分析.

原创粉丝点击