2012-04-25 69 views
2

我有一個SensorEventListener它確實在onSensorChanged()方法類似如下:onSensorChanged(...)需要同步嗎?

public void onSensorChanged(SensorEvent e){ 
    values = e.values.clone(); 
    handleEvent(); //do some computations 
} 

哪裏值是將在爲handleEvent()方法,以便做一些計算來訪問類變量。 我的問題是現在是否必須鎖定變量值,即可以通過調用onSensorChanged()而另一個線程在handleEvent()中的其他線程覆蓋值?

在此先感謝您的幫助!

回答

2

OnSensorChanged在UI線程中被調用,所以如果您在另一個線程中訪問values而不是使用ui線程,則需要同步或使用其他技術(如隊列)。

+0

好的感謝您的快速回答。順便說一句,哪個線程實際上調用'onSensorChanged()'方法?這是一些系統線程? 如果我要從UI線程訪問'values',爲什麼我不需要同步? – user1086105 2012-04-25 21:07:17

+0

我編輯了我的答案。 OnSensorChanged在UI-Thread中被調用。 – Renard 2012-04-25 21:14:50

+0

啊確定有趣!這意味着當一個線程在'onSensorChanged()'右邊工作時,onSensorChanged()'不會被某個線程調用?由於只有1個UI線程,對嗎?因此,對於這種情況,我不需要同步,因爲UI線程也會執行我的'handleEvent()'方法... 請問你從哪裏知道UI線程調用'onSensorChanged() '? – user1086105 2012-04-26 05:38:14