2012-04-25 10 views
2

私はonSensorChanged()メソッドでは、次のようなもの行いSensorEventListenerました:onSensorChanged(...)で同期が必要ですか?

値は、いくつかの計算を行うためにのhandleEvent()メソッドにアクセスされるクラス変数である
public void onSensorChanged(SensorEvent e){ 
    values = e.values.clone(); 
    handleEvent(); //do some computations 
} 

を。 私は変数値をロックする必要があるかどうか、つまり、他のスレッドがhandleEvent()にある間にonSensorChanged()を呼び出す別のスレッドによって値がオーバーライドされる可能性がありますか?

ありがとうございました!

答えて

2

UIスレッド内でOnSensorChangedが呼び出されるので、UIスレッド以外のスレッドでvaluesにアクセスする場合は、たとえば、キュ​​ーなどの他の手法を同期または使用する必要があります。

+0

okありがとうございました。 ところで、実際にはどのスレッドが 'onSensorChanged()'メソッドを呼び出していますか?これはいくつかのシステムスレッドですか? UIスレッドから 'values'にアクセスするにはなぜ同期が必要なのでしょうか? – user1086105

+0

私は私の答えを編集しました。 OnSensorChangedはUIスレッド内で呼び出されます。 – Renard

+0

ああおもしろい!これは、1つのスレッドが 'onSensorChanged()'で正しく動作している間に、 'onSensorChanged()'があるスレッドによって呼び出されないことを意味していますか? 1つのUIスレッドしかないので、正しいですか? この場合、UIスレッドは私の 'handleEvent()'メソッドを実行するので同期は必要ありません... UIスレッドが 'onSensorChanged() '? – user1086105

関連する問題