Почему нажатия клавиш ввода повторяются (один-два дополнительных раза) в моем приложении для Android?
Когда я набираю текст в разрабатываемом приложении, иногда будут повторяться вводимые символы (которые я не печатал), в том числе будет повторяться клавиша "ввод" (таким образом, отправляя мою команду через один или два дополнительных раза). Ввод всегда повторяется только один или два раза больше, может быть, три раза больше редко. Иногда требуется, возможно, 500-750 миллисекунд, чтобы повторить, хотя иногда это намного быстрее.
Я делаю приложение для Android для своего планшета. Сейчас я переписал почти каждую часть приложения, чтобы попытаться найти причину ошибки. У меня есть подкласс EditText, в который я печатаю. Первоначально я реализовывал интерфейс OnKeyListener в подклассе EditText. В настоящее время я переопределяю "dispatchKeyEvent" внутри самой Activity для обработки ключевых событий. Я делаю это так, чтобы, например, когда пользователь нажимал Enter, он отправлял команду, а затем вызывал "selectAll()" для ввода, чтобы подготовить пользователя к вводу другой команды. У меня была та же самая ошибка, внедрял ли я интерфейс OnKeyListener в настроенный виджет EditText или переопределял "dispatchKeyEvent" в Activity.
Я работаю с растровым изображением в приложении, и куча на 90% заполнена после каждой сборки мусора, что происходит довольно часто. Я не знаю, связана ли проблема с памятью - это маловероятно, потому что куча просто увеличилась бы, если бы ей понадобилось больше места.
Когда я использую приложение, я набираю на клавиатуре Bluetooth. Возможно, драйверы Bluetooth могли бы создать некоторые проблемы, но эта ошибка редко случается в других приложениях (думаю, я заметил, что это происходит в Chrome только пару раз). Это происходит примерно на 1% нажатий клавиш, которые попадают в мое приложение (что довольно часто, потому что использовать это приложение - значит набирать текст).
Я получаю некоторые предупреждения IInputConnectionWrapper каждый раз, когда выхожу из приложения, чтобы проверить LogCat. Там написано "beginBatchEdit для неактивного InputConnection", а также 2 других похожих сообщения. Я не думаю, что предупреждения имеют отношение к проблеме, но я не знаю точно.
У кого-нибудь есть догадки относительно того, что может вызвать эту ошибку? Или у кого-нибудь есть хорошая идея, как изолировать ошибку и выяснить, откуда она? Я пытался загрузить некоторые вспомогательные приложения Bluetooth Keyboard, но ни одно из них ничего не изменило. Я попытался установить 'android:largeHeap="true"' для моего тега приложения в моем манифесте, что не привело к увеличению кучи (с помощью minSdk 8 и targetSdk 11).
2 ответа
Проблема была в самой клавиатуре Bluetooth. Это было для Mac, а не Android. Я получил новую клавиатуру, проблема решена.
Вам не нужно переопределять dispatchKeyEvent
или что-нибудь, чтобы справиться с нажатием Enter на EditText
, Вместо этого правильно установите действие android:imeOptions (например, actionSend
для кнопки "Отправить" на клавиатуре), затем зарегистрируйте Activity
как OnEditorActionListener, который получает обратный вызов всякий раз, когда пользователь нажимает кнопку действия или нажимает ввод в EditText
,