(2)Camera框架 --- 窥一斑而见全豹

来源:互联网 发布:举牌照软件下载 编辑:程序博客网 时间:2024/05/16 14:25
 

      

了解Android的Camera框架(framework)的目的?

(1) 与管理Activity及Window的框架相比,Camera框架比较比较直观,也比较简单。

(2) 理解Camera框架,有助于理解Activity,Window等的管理框架。上一节已经提到,各个子系统,习惯与构建手法是雷同的

(3) 这些子系统框架中的基础设施,构建思想很少受版本更新的变化而变化。否则,学习效果就大打折扣了。

(4) 有助于解决Android系统Camera系统出的问题。              

 

往昔要点回顾

(1) 操作系统的管理核心,资源的维护及中断响应等等都以任务为中心。

(2) 进程可以作为理解Android框架的出发点.

(3) Android所有的服务,都存在于特定进程中。一个进程可以包含及提供多种服务.

       参看图(1) 进程中的多个服务

图(1) 多个服务共存于同一个进程

(4) Binder服务,既可以向服务管理器注册唯一的标识名,向客户提供公开服务,也可以不向服务管理器注册,从而提供匿名服务。

(5) 匿名服务只能通过公开的服务接口得到。

(6) Android中,系统客户应用,可以通过Binder接口获得服务

(7) Android代码分析中,反复实践是非常重要的。参看图(2),Makefile文件的路标指示作用

图(2) 代码实践---Makefile文件

Camera 框架要点

(1) Binder结构,见”Android集萃系列--基础”

(2) JNI函数使用中的常见层次结构,参见图(3) JNI的层次与图(4)JNI的使用。

      (a) Java App à JNI à Libraries à Abstract layer

      (b) Java App à JNI à Libraries à C Service à Abstract Layer

      (c) Java App à Java Service à JNI à Libraries à C Service à Abstract Layer

图(3) JNI的层次

图(4) JNI库的注册与使用

(3) Android 4.0 Camera的架构

图(5) Camera的架构

Camera 框架的时序

(1) Camera服务的注册,参看图 (6)

图(6) Camera服务的注册

 

(2) Camera客户端应用程序,使用框架及API. 参看图 (7)

图(7) Camera框架及API的使用

(3) 客户端透过JNI, 使用Binder接口访问服务, 参看图(8)

图(8) 访问Camera服务

(4)  客户端使用Camera服务的公开接口,获得匿名服务的代理

图(9)获得Camera服务的匿名服务

(5)  客户端与服务端建立双向通道的接口

图(10) 客户端与服务端的接口

总结

(1) 时刻留意,软件模块所处的层次

 (2) 掌握核心的数据结构与接口,它们是软件系统的骨架

 (3) 下一步做什么?

       以Camera骨架为出发点,对Camera子系统进一步细化。

       例如,分析某个用户的请求从上到下如何传递?

          或者尝试回答Binder可以在线程间使用吗?等等…

(4) 了解培养一种解决问题的”习惯”,Client的管理,请求与响应等等。这种习惯,

      不仅仅存在于Camera,在Activity, Window等等子系统中都会看到。实际上

       它无处不见,甚至在kernel中也随处可见。

 

(5) 再仔细观察一下,我们分析代码后,得到的结果。参看图(11) Camera结构

图(11) Android Camera结构略图