public void onSensorChanged(int sensor, float[] values) {
synchronized (this) {
//this method runs too often!!
}
}
如何防止此方法过于频繁地运行?我想要做的是,一旦这个方法运行,这个方法将不会在接下来的1秒内再次运行?
答案 0 :(得分:2)
您正在侦听传感器的更新。当您注册使用SensorManager.registerListener()
收听时,您可以指定费率参数。尝试将此设置为SensorManager.SENSOR_DELAY_NORMAL
以获得最低的更新速率,这应该非常合适。如果它太慢,你在你的方法中做了太多的工作。
答案 1 :(得分:1)
传感器事件确实有时间戳信息。存储上次运行方法的时间戳。忽略即将发生的事件,直到它们达到上一个时间戳加上所需的阈值(分离)。
我的意思是:
long tsLastEvent = 0;
long thresholdEvent = 1000000;
public void onSensorChanged(SensorEvent event) {
synchronized (this) {
if (event.timestamp > tsLastEvent + thresholdEvent) {
tsLastEvent = event.timestamp;
// ... dealing with the event ...
}
}
}
答案 2 :(得分:0)
嘿那个我们无法自定义的东西....但我建议你在可以从onSensorChanged()方法访问的范围内保留长值....所以一旦你执行它之前保存当前时间(以毫秒为单位)并且如果调用该方法,只需比较之前调用它的时间以及如果该值小于1秒...不执行代码