Что происходит, когда onSensorChanged() вызывается до того, как он сможет завершить текущее выполнение?

Это моя функция.

 public void onSensorChanged(SensorEvent event)
    {

            if (event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION)
            {
               //DO A JOB...
            }
     }      

Мой вопрос: что произойдет, если onSensorChanged() будет вызван во время завершения текущей работы?


person Ashwin    schedule 13.10.2012    source источник


Ответы (1)


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

В общем случае вся обработка должна выполняться в другом потоке, а onSensorChanged должен возвращаться как можно быстрее, чтобы другие получатели также могли обрабатывать данные. Также скопируйте данные, не передавайте ссылку на данные датчика, поскольку объект SensorData может использоваться повторно, и если вы сохраните ссылку на данные, они могут измениться к тому времени, когда вы перейдете к их использованию.

person Douglas Jones    schedule 14.10.2012
comment
Вы уверены, что onSensorChanged() не вызывается, если он все еще обрабатывается? Есть ли какая-то статья или ссылка, где это сказано. Поток пользовательского интерфейса будет выполнять onSensorChanged(), а какой-то поток ОС (я думаю) будет измерять датчики, верно? - person Ashwin; 12.11.2012