1. Sensor的概念
Sensor即传感器,在当前智能手机上大量存在:G-Sensor、LightsSensor、ProximitySensor、TemperatureSensor等,其作为Android系统的一个输入设备,对于重视用户体验的移动设备来说是必不可少的。Sensor虽然是一个输入设备,但是它又不同于触摸屏,键盘,按键等这些常规的输入设备,因为Sensor的数据输入从传感器硬件到设备的,而常规的输入设备是从用户到设备的,比如:温度传感器用于感知温度的变化,采样传感器数据上报给设备。而传感器硬件的工作与否,采样精度是由用户来控制的,所以对应Sensor而言是其工作方式是双向的,即:控制硬件的控制流,硬件上报的数据流。这也决定了Sensor的框架不同与触摸屏等常规输入子系统。
本章节主要研究的Sensor框架代码与SensorHAL的实现细节,一切还是从Sensor框架开始,首先来回顾下Led HAL的实现框架。
Led HAL是我们自己实现的,主要分为四部分:
Led App:Led的应用程序
Led Service框架:Led应用的API提供者
LedService本地:LedService服务的本地实现,上层与底层的通信转化接口
Led HAL Stub:HAL层代码,具体硬件驱动操作接口
很明显,我们写的Led HAL代码是典型的控制流,反馈结果就是Led灯的亮与灭,它的架构不适用于Sensor架构,具体有如下几点:
l Led是单纯的控制流,而Sensor是控制流与数据流
Sensor的数据流不是实时的,而是有采样速率,并且数据不是连续的,阻塞在读取硬件设备数据上,只有数据得到才返回。
l Sensor是提供给所有传感器的通用框架,不是针对某一特定硬件的架构
Sensor包含多种类型,在上层和底层都有对Sensor具体类型的屏蔽,让它通用所有传感器。
l Sensor的服务不是由应用程序创建启动的,应该是伴随系统启动的
任何一个应用程序里都可以使用Sensor服务,这决定了Sensor服务应该伴随系统启动。
2. Sensor的框架分析
本节是本系列第一个分析的具体设备的框架,从Android SensorService的注册启动开始,到应用程序获得SensorManager注册传感器监听器,详细分析从应