Camera APP 层分析之对camera framework 层封装解析 Android4.4 版本的camera 和4.0 版本的设计差距还是很大的,4.0版本以前的camera在是camera 主activity 中直接调用camera hal层的的接口(如android.hardware.camera.open(), android.hardware.camera.setPreviewDisplay(), android.hardware.camera..startPreview()等)与camera device 通信。Android4.4 版本camera app 对camera device 的访问又封装了一次,对camera device 的访问必须经过 camera manager 接口,camera manager 接口定义了 camera 基本操作,这样便于控制和管理 camera device。下图为相关类关系图。 1.CameraManager 接口:提供的访问 camera 设备基本的操作,实 现 类 必 须 调用CameraManager.cameraOpen获 取CameraManager.CameraProxy 接口对象来控制 camera,实现CameraManager 接口的类必须拥有一个独立于主线程的线程来实现对camera 的操作,CameraManager 接口也包装回调函数 2.CameraProxy 接口,封装在CameraManager 接口之内,接收对camera 操作请求,发送消息到 camer handle。所有对camera 的操作都经由改接口,进行异步处理 3. AndroidCameraManagerImpl 类,该类实现了 CameraManager接口,与camera framework 层接口直接通信,起到 camera app 与camera framework 对话中介的作用。 4.AndroidCameraProxyImpl 类,AndroidCameraManagerImpl 内部类,实现CameraManager.CameraProxy 接口,CameraProxy 已经介绍过了就是控制对camera 的访问,AndroidCameraProxyImpl类实现了具体的操作。 5. CameraManagerFactory 类,这个类的实现很简单,看到 Factory,会 想 到 软 件 设 计 中 的工 厂 模 式 ,这 里 就是封 装 了创 建CameraManager 对象的细节 6. CameraHolder 类,看名字就可以看出这个类的基本功能了,就用来保存 camera 实力对象的,用在不同的module 之间快速切换 CameraManagerCameraProxyAndroidCameraManagerImpl-mCamera-CameraHandler mCameraHandler+AndroidCameraProxyImpl()AndroidCameraProxyImpl+getCamera()CameraManagerFactory-static AndroidCameraManagerImpl sAndroidCameraManager+static synchronized CameraManager getAndroidCameraManager()CameraHolder-CameraProxy mCameraDevice+synchronized CameraProxy...