2013-04-11 5 views
0

Я разрабатываю приложение, которое должно выполнить калибровку акселерометра в несколько этапов.SensorEventListener не регистрирует себя

Что я сделал, это создать SensorEventListener, который получает определенное количество показаний, и после достижения этой суммы я вызываю «sensorManager(). UnregisterListener (eventListener)».

Однако, я думаю, что эта строка не отменяет регистрацию слушателя, так как сразу после этого вызывается одна и та же строка в результате продолжения работы.

Вопрос: Я делаю все правильно таким образом или должен обработать обработчик так, чтобы после достижения этого условия он не позволял себе работать (используя if)?

ответ

1

Если ваш SensorEventListener вызывается только один раз после того, как вы его не зарегистрировали, это, вероятно, связано с race condition, благодаря многопоточной природе Android. Поэтому, если вы хотите отключить обработку показаний, тогда (как вы предлагаете) вы должны установить логическую переменную и протестировать ее с помощью инструкций if, чтобы обеспечить дальнейшую обработку после того, как вы достигли своего предела.

+0

Я думал, что для каждого слушателя существует одна нить, но я думаю, это было немного наивно. Должно ли булевое быть синхронизировано? Или это было необходимо только в том случае, если государство изменилось взад-вперед? – ravemir

+0

В большинстве операционных систем настройка или тестирование Boolean должно быть атомной операцией, поэтому синхронизация только для проверки или проверки логического значения не требуется. Тем не менее, синхронизация может потребоваться для получения поведения, которое вы ищете. – Stochastically