2013-04-11 64 views
0

我一直在開發一個應用程序,需要在幾個步驟中執行加速度計校準。SensorEventListener不註銷自己

我所做的是創建一個SensorEventListener,獲取一定數量的讀數,達到這個數量後,我調用'sensorManager().unregisterListener(eventListener)'。

但是,我認爲這條線沒有註銷監聽器,因爲之後立即調用同一行,作爲繼續運行的結果。

問題:我是否以這種方式正確地處理事務,或者應該處理我的處理程序,以便達到此條件後它不允許它自己運行(使用if)?

回答

1

如果您的SensorEventListener在您註銷後僅被調用一次,則此行爲可能是由於Android的多線程特性導致race condition。所以,如果你想關閉處理讀數,那麼(如你所建議的),你應該設置一個布爾變量,並用if語句來測試它,以確保在達到極限時不再進行處理。

+0

我認爲每個聽衆都有一個單獨的線程,但我覺得這有點幼稚。布爾值是否應該同步?還是隻有當國家來回變化時纔有必要? – ravemir 2013-04-11 22:12:26

+0

在大多數操作系統上,設置或測試布爾值應該是原子操作,所以不需要同步來測試或檢查布爾值。然而,同步可能是必要的,以獲得您正在尋找的行爲。 – Stochastically 2013-04-11 23:29:48