更新:
我能够通过引入一个类范围的静态计数器并忽略任何 x 个事件来解决我遇到的特定问题。但是我仍然想知道我做错了什么:在微秒内注册带有提示的侦听器,而不是使用四个给定常量之一。
我的应用程序中的一个 Activity 正在使用传感器来获取设备的方向、确定滚动并利用它。
我在用
SensorManager.registerListener(SensorEventListener listener, Sensor sensor, int rate)
注册我的传感器。来自此方法的 Android 文档:
参数
[...]
速度
速率传感器事件的发送时间为。这只是对系统的提示。事件的接收速度可能比指定的速率快或慢。通常会更快地接收到事件。该值必须是 SENSOR_DELAY_NORMAL、SENSOR_DELAY_UI、SENSOR_DELAY_GAME 或 SENSOR_DELAY_FASTEST 之一,或者是所需的事件之间的延迟(以微秒为单位)。
如果我使用 4 个预定义常量之一,那么应用程序可以正常工作;然而,这些常数都提供了对我的需要来说太快的速率提示。我必须发送一个 UDP 数据包,其中包含每个事件更改的一些信息,并且接收端似乎完全被使用任何预定义速率的消息淹没。使用像 30000 这样的整数(因为 API 以微秒为单位指定数量)会导致应用程序停止同时报告传感器事件。
我错过了什么阻止我使用自己的事件率提示?