如何防止我的Android应用经常运行此方法?

时间:2011-12-11 16:36:12

标签: java android

public void onSensorChanged(int sensor, float[] values) {
    synchronized (this) {
        //this method runs too often!!
    }
}       

如何防止此方法过于频繁地运行?我想要做的是,一旦这个方法运行,这个方法将不会在接下来的1秒内再次运行?

3 个答案:

答案 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秒...不执行代码