2010-09-15 28 views
0

這個問題是基本的Java,而不是android。如果偵聽器接口內部的代碼執行一些複雜的計算,那麼系統給出的回調會發生什麼情況。在Android中,加速計讀數收集在onSensorChanged(SensorEvent事件)中。 如果我想處理「事件」數據,並且它每秒調用30-40次。怎麼了 ?Android加速器(通常是Java)如何處理回調監聽器?

這是否減少了功能調用? 或者這是否滯後於輸出,但是所有調用都會最終執行?

我知道這應該在單獨的線程中處理,但是如果大量的線程繼續生成,這可能是一個問題。 另外我不能依靠Java System.currentTimeMillis();用於ping每一個500毫秒,因爲這從來不可靠(從某種程度上來說,它保證函數不會在500毫秒之前調用,但不會像1000秒之後那樣最大時間,在我的情況下這將是一個問題,因爲我需要數據至少在500毫秒內)。

或者我應該考慮將TimerTask改爲每500毫秒收集一次數據?

回答

0

無論如何你都不能在回調中進行復雜的計算。如果花費幾秒鐘完成,你應該以ANR結束。

最佳解決方案是創建其他線程並將所需事件的值保存到該線程中。在該線程中,您可以隨時處理保存的值。由於我們正在討論加速度計,因此這可能是200-250毫秒。

0

我建議不要在任何列表器中編寫耗時的內置函數。

即使由於您的應用程序的需求,建議使用任何線程獨立隊列數據結構。

將事件數據放入隊列並在另一端使用它。