Насколько велика и постоянна задержка между прикосновением к дисплею и вызовом onTouchEvent в Android? - PullRequest
0 голосов
/ 15 ноября 2018

Для моей дипломной работы мне нужно написать приложение для Android, которое получает очень точное и последовательное время реакции (имеет значение каждая миллисекунда) от пользователя.Он будет использоваться для психологических исследований.Я использую Android SDK и Java.

Одним из способов, которым пользователь может «реагировать», является прикосновение к дисплею.

В данный момент я вызываю System.nanoTime () в onTouchEvent (event) callback.Из этого я вычитаю начальное значение (также взятое с System.nanoTime () ), чтобы получить время реакции.

Но меня беспокоит то, насколько быстро, точно и согласованно (со временем /на разных устройствах) система вызывает этот метод после того, как пользователь фактически коснулся дисплея.

Возможные проблемы, которые я имею в виду:
a) разные задержки на разных устройствах из-за разного используемого оборудования
b) задержки из-за других потоков, которые могут быть выполнены первыми
c)высокоуровневая природа языка Java -> вы никогда не знаете (и не можете контролировать), что происходит в фоновом режиме, в какое время / в каком порядке.

Как я мог узнать об этом?Может ли использование NDK (C ++) помочь мне получить более точные и согласованные значения?Спасибо!

1 Ответ

0 голосов
/ 15 ноября 2018

Мне нужно написать приложение для Android, которое получает очень точное и согласованное время реакции (имеет значение каждая миллисекунда) от пользователя

Android не является операционной системой реального времени (ОСРВ).

Возможные проблемы, которые я имею в виду

Ваши первые два действительны.Третий, строго говоря, не в том, что в Java нет ничего более «происходящего в фоновом режиме», чем в других языках программирования.Однако Java по своей сути медленнее, добавляя задержку.

В большинстве случаев вам также необходимо учитывать другие приложения, которые могут работать, так как они тоже будут нуждаться в времени ЦП, и имеется очень много ядер ЦП.ходить вокруг.

Как я могу узнать об этом?

У вас не будет отличного способа измерить это с человеком-участником.В конце концов, если бы вы точно знали, когда пользователь коснулся экрана (чтобы измерить время между ним и onTouchEvent()), вы просто использовали бы этот механизм вместо onTouchEvent().

Возможно создать нечеловеческого участника.Есть люди, которые создали роботов, которые используют емкостный стилус для нажатия на экран.Теоретически, если у вас есть хорошо синхронизированные часы, вы можете определить время, когда робот коснулся экрана, и время, когда вы получаете вызов onTouchEvent().Иметь "хорошо синхронизированные часы" само по себе может быть сложно, а создание робота, который касается экрана, - это его собственное инженерное упражнение.

Может ли использование NDK (C ++) помочь мне получить более точные и последовательные данные?значения?

Я не знаю, как вы определяете «точный» в этом сценарии.Я не ожидал бы, что NDK поможет с последовательностью.Это должно помочь минимизировать задержку между касанием экрана и вашими данными об этом касании экрана (используя любые средства на основе NDK, которые разработчики игр используют для определения касаний экрана).

...