Android SensorService 的整体启动时序图如下:

SensorService启动过程主要完成下面几项工作:
- 实例化SensorService对象。
- 将自身加到系统Service列表中。
- 进入onFirstRef(),对整个SensorService初始化。
- 实例化SensorDevice对象。
- SensorDevice中首先加载"sensors.xxxx.so",取得sensors_module_t结构。
- 调用sensors_open_1()函数。
- 获取sensor列表,对所有sensor HAL层实现调用open_device()。
- 注册sensor。
- 注册虚拟sensor(RotationVectorSensor、GravitySensor、LinearAccelerationSensor、OrientationSensor、CorrectedGyroSensor、GyroDriftSensor等)
- 启动线程轮训各sensor上报的input事件,实际调用sensor HAL层的readEvents()。
注意:
只有当APP使用到sensor时,才会调用对应sensor HAL层的enable()方法,enable()实际通过ioctl调用驱动,开关数据获取。
网友评论