0

当我输入我正在开发的应用程序时,偶尔会有重复的输入字符(我没有输入),包括“输入”键会重复(因此我的命令会额外发送一到两次)。输入总是只重复一次或两次,很少重复三次。有时可能需要 500-750 毫秒才能重复,但有时速度要快得多。

我正在为我的平板电脑制作一个 Android 应用程序。我现在几乎重写了应用程序的每个部分,试图找出导致错误的原因。我有一个我输入的 EditText 子类。最初我是在 EditText 的子类中实现 OnKeyListener 接口。我目前正在覆盖 Activity 本身中的“dispatchKeyEvent”来处理关键事件。我这样做是为了当用户按下 Enter 键时,例如,它会发送命令,然后调用输入的“selectAll()”以准备用户键入另一个命令。无论是在自定义的 EditText 小部件中实现 OnKeyListener 接口,还是在 Activity 中覆盖“dispatchKeyEvent”,我都遇到了同样的错误。

我正在使用应用程序中的位图,每次垃圾收集后堆大约 90% 已满,这种情况经常发生。我不知道问题是否与内存有关 - 似乎不太可能,因为如果需要更多空间,堆只会增长。

当我使用该应用程序时,我会输入蓝牙键盘。也许蓝牙驱动程序可能会引入一些问题,但这个错误很少发生在其他应用程序中(我想我发现它只在 Chrome 中发生过几次)。它发生在大约 1% 的进入我的应用程序的击键上(这很常见,因为使用这个应用程序就是打字)。

每次我在应用程序中使用 alt-tab 键检查 LogCat 时,都会收到一些 IInputConnectionWrapper 警告。它显示“beginBatchEdit on inactive InputConnection”以及其他 2 条类似消息。我认为这些警告与问题无关,但我不确定。

任何人都有预感可能导致此错误的原因是什么?或者任何人都知道如何隔离错误并找出它的来源?我尝试下载一些蓝牙键盘“助手”应用程序,但没有任何改变。我尝试在清单中为我的应用程序标签设置'android:largeHeap="true"',这不会导致堆变大(使用 minSdk 8 和 targetSdk 11)。

4

2 回答 2

0

问题出在蓝牙键盘本身。它适用于 Mac,而不是 Android。我有一个新键盘,问题解决了。

于 2013-03-30T16:30:46.373 回答
0

您不必覆盖dispatchKeyEvent或任何处理在EditText. 相反,正确设置android:imeOptions操作(例如actionSend键盘上的“发送”按钮),然后将您注册ActivityOnEditorActionListener,只要用户单击操作按钮或在EditText.

于 2013-03-23T02:45:57.233 回答