Android: улучшите частоту дискретизации датчика с помощью NDK и опроса - PullRequest
8 голосов
/ 12 февраля 2012

Я хочу написать приложение, которое считывает как можно больше значений датчиков (за раз) с разных датчиков (GPS, Acc, Gyro, Compass). Поэтому я должен выяснить, есть ли преимущество в использовании NDK.

Вот мои вопросы:

а) Что является узким местом при считывании значений датчика с датчика? Это сам Senosr или Java? Могу ли я увеличить ставку с помощью NDK? (Я думаю, что для GPS узким местом является сам датчик, но я читал, что, например, гироскопический датчик довольно быстрый) Я нашел эту тему , и, похоже, узким местом является датчик. Кто-нибудь может это подтвердить?

б) Увеличивает ли опрос вместо использования EventListener скорость? Какой лучший способ быстрого считывания значений датчика?

в) Влияет ли использование NDK на энергопотребление приложения? Я ничего не нашел об этом.

г) Я новичок в Android. Намного ли больше позволить использовать NDK вместо обычной Java? В соответствии с этим образцом кода кажется, что взаимодействовать с датчиками с помощью очереди событий довольно просто, но насколько это позволяет компилировать код и использовать его из приложения?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 25 июня 2015

Из опыта я могу, по крайней мере, ответить на первый из ваших вопросов:

a) Использование базовой Java достаточно быстро для работы с несколькими датчиками.В одном из моих приложений я прочитал Акселерометр, Гироскоп, Магнитометр, Вектор вращения игры и Некалиброванный магнитометр одновременно с SENSOR_DELAY_FASTEST.

Кроме того, я также выполнил кучу фильтрации и хранения данных, а такжекак некоторые кватернионные математики, чтобы отслеживать вращение.Глядя на необработанные данные (которые я также сохранил в текстовом файле .txt), я не обнаружил пропущенных данных или задержек (средняя разница между метками времени была такой же, как при работе с одним датчиком без вычислений).

Так что в моем случае датчики работали так быстро, как могли, и Java работала хорошо.

...

Тем не менее, если вы делаете очень большиеколичество вычислений, используя NDK, возможно, стоит попробовать.

0 голосов
/ 23 сентября 2012

Когда вы регистрируете свой сенсорный слушатель, вам нужно передать SensorManager.SENSOR_DELAY_FASTEST в registerListener().

. Подробнее см. http://developer.android.com/reference/android/hardware/SensorManager.html.

...