События сенсорного Android отфильтрованы? - PullRequest
1 голос
/ 05 ноября 2011

Я написал приложение для Android, которое захватывает все TouchEvents (например, DOWN, UP, MOVE ..) и выгружает его в файл журнала.

Приложение отлично работает с настоящими человеческими прикосновениями, со скоростью 1-> 5 касаний в секунду. Однако, когда я использую механический генератор касаний, работающий со скоростью около 100-> 500 касаний в секунду, файл журнала показывает меньшее количество касаний, чем я на самом деле генерировал.

Посмотрев на прикосновения, записанные в файле журнала, с отметками времени каждого события прикосновения, я обнаружил очень странную картину захвата событий приложением. Всегда есть 2 последовательных события, которые находятся на расстоянии 2 миллисекунды, после чего следует другое событие примерно через 50 мс.

Например: 1-е событие произошло в 10-й миллисекунде

Второе событие произошло через 12 миллисекунд, то есть через 2 миллисекунды после первого

3-е событие произошло на 62-й миллисекунде, что составляет 50 миллисекунд после первого

4-е событие произошло за 64-е миллисекунды, то есть через 2 миллисекунды после первого

затем следующее событие произошло на 104-й миллисекунде ... и затем на 106-м ... и так далее

Я обыскивал эту проблему без удачи. Однако я обнаружил, что Android допускает двойное касание, но не допускает более двух последовательных касаний. Это означает, что вы можете иметь 2 последовательных касания очень близко друг к другу, но не более 2. Я предполагаю, что драйвер экрана отключает 3-й, 4-й .... касание даже в течение некоторого периода времени (очень вероятно, 50 миллисекунд), пока это позволяет следующему событию случиться снова. Причиной этого является то, что предполагается, что человек не может дотронуться слишком быстро, и такое прикосновение следует отключить и рассматривать как ошибку / шум.
Обратите внимание, что это отличается от мультитача, так как я говорю о последовательных событиях, происходящих в разные моменты времени (даже если они очень близки) с очень высокой скоростью, а не множественные события касания происходят одновременно в мультитаче.

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

Я был бы очень признателен, если бы кто-нибудь смог подтвердить / подтвердить мою гипотезу или помочь мне обойти фильтр, который использует Android.

Большое спасибо за то, что прочитали все до этого момента :).

1 Ответ

0 голосов
/ 29 августа 2012

Я не уверен, что вы уже нашли решение для этого, однако недавно я столкнулся с тем же. Я получал следы стека, напечатанные в Logcat, утверждая, что слишком много потоков обращались к одному и тому же файлу журнала (это имеет смысл, потому что каждый раз, когда вы записываете в файл, он автоматически запускает его в новом потоке). Мое решение состояло в том, чтобы просто поместить все журналы в массив из нескольких сотен строк, и когда массив достиг максимального размера, используйте StringBuilder, чтобы добавить все журналы и записать их (один поток) в мой файл. Это решило все мои проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...