Android HAL 使系统卡在 poll() 函数中

标签 android android-sensors hal sensormanager

我们正在开发定制开发板,目前,我们正在 Android 7.1 上实现“传感器 HAL”。

我们已经根据 Android 传感器服务要求 (sensor.h) 实现了“传感器 HAL”API,并且能够为其构建 .so 文件。 (由于一些自定义修改,我们无法使用已经可用的 HAL。)

集成“Sensor HAL”后,我们看到 Android 进入挂起状态,直到 Android 锁定屏幕才能到达。

我们对 Android 传感器服务行为的观察

  1. SensorService:nuSensorService 正在启动...

  2. 由传感器服务加载的“传感器 HAL”

  3. “传感器HAL”开启调用成功

  4. “传感器 HAL”get_sensor_list 调用成功

  5. “传感器 HAL”轮询函数每次都调用成功。

  6. Android 启动卡在“Bootanimation”屏幕

引用日志

01-01 00:58:48.258 1461 1461 D SensorService: nuSensorService starting...
01-01 00:58:48.260 1461 1461 D Sensor_HAL: OpenSensors: name=poll
01-01 00:58:48.260 1461 1461 D Sensor_HAL: Exiting... OpenSensors: name=poll
01-01 00:58:48.260 1461 1461 D Sensor_HAL: Entering @GetSensorList
01-01 00:58:48.260 1461 1461 D Sensor_HAL: Exiting @GetSensorList
01-01 00:58:48.261 1461 1461 D Sensor_HAL: Entering @SensorDeviceActivate, handle 0, enabled 0
01-01 00:58:48.261 1461 1461 D Sensor_HAL: Entering @SensorDeviceActivate, handle 1, enabled 0
01-01 00:58:48.262 1461 1461 D Sensor_HAL: Entering @SensorDeviceActivate, handle 2, enabled 0
01-01 00:58:48.262 1461 1461 D Sensor_HAL: Entering @GetSensorList
01-01 00:58:48.262 1461 1461 D Sensor_HAL: Exiting @GetSensorList
01-01 00:58:48.262 1461 1461 D Sensor_HAL: Entering @GetSensorList
01-01 00:58:48.262 1461 1461 D Sensor_HAL: Exiting @GetSensorList
01-01 00:58:48.264 1461 1463 D SensorService: nuSensorService thread starting...
01-01 00:58:49.953 1461 1462 D SensorService: new thread SensorEventAckReceiver

=> 以上调用了导致系统挂起的 poll 函数。

=> Android 启动卡在此处。

请注意,当前 poll() 命令的实现是将带有时间戳的虚拟加速度计事件返回给上层。返回值为复制的数据事件数。

如果您发现有什么遗漏或理解有误,请指正。

最佳答案

伙计们,

最后,我能够通过在同一函数中添加延迟来解决这个问题。

Poll() 函数正在线程中调用并将事件发送到系统客户端 (SensorManager)。由于我们是直接从函数返回,没有任何延迟,事件将以更快的速度推送,没有时间调度其他线程。

要完成此操作,需要考虑延迟量。

关于Android HAL 使系统卡在 poll() 函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46482127/

相关文章:

javascript - 使用 javascript 映射读取键值对以填充选择器 react native 时出错

android - FrameLayout 的宽度永远不会真正为 0

android - 如何获取 Android 设备上正在运行的 HAL 列表?

c - 一起使用静态分配和封装

java - 如何获得重力方向

Android O HIDL 不可用

java - onMapReady 并不总是被调用

Android导航组件从homefragment关闭应用程序

android - 无法从 Moto 360 读取心率传感器 - Android Wear

android - 是否可以在真实(非模拟)设备上模拟加速度计运动?