2013-03-23 74 views
0

當我輸入我正在開發的應用程序時,偶爾會有重複的輸入字符(我沒有輸入),包括「輸入」鍵將會重複(因此會通過額外的一兩次發送我的命令)。輸入總是隻重複一次或兩次,也許很少重複三次。有時可能需要500-750毫秒的時間才能重複,但有時會更快。爲什麼我的Android應用程序中輸入按鍵重複(一至兩次)?

我正在爲我的平板電腦製作Android應用程序。我現在已經重寫了應用程序的幾乎所有部分,以試圖找出造成錯誤的原因。我有我輸入的EditText的子類。最初我在EditText的子類中實現了OnKeyListener接口。我目前正在重寫Activity中的「dispatchKeyEvent」來處理關鍵事件。我這樣做是爲了當用戶按Enter時,例如,它會發送命令,然後調用輸入的「selectAll()」以準備用戶鍵入另一個命令。無論我是在定製的EditText小部件中實現OnKeyListener接口還是在活動中覆蓋「dispatchKeyEvent」,我都遇到了同樣的錯誤。

我正在使用應用程序中的位圖,並且在每次垃圾回收之後堆大約已經完成了90%,這經常發生。我不知道問題是否與內存有關 - 似乎不太可能,因爲如果需要更多空間的話,堆只會增長。

當我使用該應用程序時,我輸入一個藍牙鍵盤。也許藍牙驅動程序可能會引入一些問題,但該錯誤很少發生在其他應用程序中(我想我發現它只發生在Chrome中幾次)。它可能會發生在我的應用程序(這是相當頻繁的,因爲使用這個應用程序是鍵入)的鍵擊約1%的情況。

我每次檢測LogCat時都會出現一些IInputConnectionWrapper警告。它說「beginBatchEdit on inactive InputConnection」以及另外2個類似的消息。我不認爲警告與問題有關,但我不確定。

任何人都有預感什麼可能會導致此錯誤?或者任何人都對如何隔離錯誤並找出錯誤來自哪裏有好的想法?我試圖下載一些藍牙鍵盤「幫手」應用程序,其中沒有任何改變。我已經嘗試在我的清單中爲應用程序標記設置'android:largeHeap =「true」',這不會導致堆很大(使用minSdk 8和targetSdk 11)。

回答

0

問題是藍牙鍵盤本身。這是爲Mac,而不是Android。我有一個新的鍵盤,解決了問題。

0

您不必覆蓋dispatchKeyEvent或其他任何東西來處理輸入EditText。相反,請正確設置android:imeOptions操作(例如在actionSend中鍵入「發送」按鈕),然後將Activity註冊爲OnEditorActionListener,該用戶在用戶單擊操作按鈕或點擊輸入EditText時會獲得回叫。

+0

我確實需要比'android:imeOptions'更多的控制,因爲我正在處理其他KeyEvent,比如用戶定義的宏。我已經回到實施'EditText'子類中的'OnKeyListener'接口,因爲這看起來更合理,但輸入重複問題依然存在。 – 2013-03-23 14:39:26

+0

現在重寫了更多的代碼,在我看來,問題出在藍牙鍵盤驅動程序中......我注意到它發生在我用Alt-Tab(在我的平板電腦上)將程序從我的應用程序切換掉時,而我我相信我發現它發生在Chrome和AIDE上(雖然我迄今爲止輸入了很多AIDE,但幾乎沒有發生過)。任何人都可以確認藍牙鍵盤驅動程序的理論,或建議一個解決方案的驅動程序來測試理論?我猜可能是我的鍵盤硬件。 – 2013-03-23 16:38:00

相關問題