2011-12-11 26 views
2
public void onSensorChanged(int sensor, float[] values) { 
    synchronized (this) { 
     //this method runs too often!! 
    } 
}  

如何防止此方法運行頻繁?我想要做的是,一旦這個方法運行,這個方法在接下來的1秒內不會再運行?如何防止我的Android應用程序頻繁運行此方法?

+0

它是我的Android應用程序的一部分,它實現了SensorListener〜 – user1092428

+0

因此,該方法不會運行得過於頻繁,它會在它應該運行時運行。問題是你有一些重量級(慢)代碼附加到它。您應該檢查自上次調用以來的ElapsedTime,並且每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 ... 
     } 
    } 
} 
+0

非常感謝,那麼這種新方法會變成這樣嗎? public void onSensorChanged(int sensor,float [] values,SensorEvent event) – user1092428

0

嘿,這事我們不能定製....但我建議你留着長長的值與範圍,可以是從onSensorChanged訪問()方法....所以一旦你在以毫秒爲單位保存當前時間之前執行它,再次調用方法時,只需比較先前調用的時間和值是否小於1秒......不要執行代碼

相關問題