一、Sensor framwork service介绍
在上一节Framework层分析_Client端已经介绍了Sensor在framework中的框架结构,本文主要分析SensorService的启动流程和HAL层的交互工作。其中SensorService中主要包含以下类:
(1)SensorService.cpp
./frameworks/native/service/sensorservice/SensorService.cpp
SensorService是Android Sensor Framework最核心的模块,它实现了主要的Sensor控制流和数据流逻辑,完成Sensor参数的配置,数据分发,Client请求数据处理等功能。
(2)BinderService
./frameworks/native/include/binder/BinderService.h
BinderService是Android Service框架的主要类,它提供了Service的生命周期管理、进程将通信、请求响应处理等功能。Android总的大部分Service都会继承此类。
(3)SensorEventConnect
./framework/native/libs/gui/ISensorEventConnect.cpp
SensorEventConnect是sensor数据传输通道,当Client开始监听某一个Sensor时,一个对应的SensorEventConnect将会被创建,Server端在接收到Sensor数据后,通过写入到SensorEventConnect传输给Client端。
(4)SensorDevice
./framework/native/services/sensorservice/SensorDevice.cpp
该类主要负责与HAL层交互。下面看下程序走向图:
二、SensorService流程分析
在系统启动时,SystemServer中会启动需要开启的服务,系统服务通过调用startSensorService启动sensorService,调用JNI,通过SensorService::instantiate实例化SensorService对象。
SensorService创建之后,将会调用SensorService::onFirstRefs()方法,来完成初始化工作,首先通过SensorDevice::getInstance来创建对象dev,调用dev.getSensorList(&list)获取传感器列表,传入sensor_t类型的list,创建HardwareSensor对象,传递给registerSensor,注册传感器,下面看下SensorService的onFirstRef方法。
void SensorService::onFirstRef()
{
ALOGD("nuSensorService starting...");
SensorDevice& dev(SensorDevice::getInstance());//实例化SensorDevice
if (dev.initCheck() == NO_ERROR) {
sensor_t const* list;
ssize_t count = dev.getSensorList(&list);//获取sensorlist