簡體   English   中英

Android加速計(通常為Java)如何處理回叫偵聽器?

[英]How does Android accelerometer (Java in general) handles call back listeners?

這個問題是Java而非Android的基本知識。 如果偵聽器界面中的代碼進行了一些復雜的計算,則系統給定的回調會發生什么。 在Android中,加速度計的讀數收集在onSensorChanged(SensorEvent event)中。 如果我要處理“事件”數據,則每秒調用30-40次。 怎么了 ?

這會減少對函數的調用嗎? 還是這會滯后於輸出,但是所有調用最終都將被執行?

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

還是應該考慮使用TimerTask而不是每500毫秒收集一次數據?

無論如何,您都無法在回調中執行復雜的計算。 如果花了幾秒鍾完成操作,則應以ANR結尾。

最好的解決方案是創建另一個線程,並將所需事件的值保存到該線程中。 在該線程中,您可以隨時處理保存的值。 由於我們正在談論加速度計,因此可能應該是200-250ms。

我建議不要在任何列表器中寫您費時的實現。

即使由於您應用程序中的要求,還是建議使用任何與線程無關的隊列數據結構。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM