0

開発中のアプリに入力すると、「Enter」キーを含む(入力しなかった)入力文字が繰り返されることがあります(したがって、コマンドを1〜2回余分に送信します)。入力は常に1回または2回余分に繰り返されますが、まれに3回余分に繰り返されることもあります。繰り返すのに500〜750ミリ秒かかることもありますが、はるかに速いこともあります。

タブレット用のAndroidアプリを作成しています。バグの原因を突き止めるために、アプリのほぼすべての部分を書き直しました。入力するEditTextのサブクラスがあります。もともと私はEditTextのサブクラスにOnKeyListenerインターフェースを実装していました。現在、キーイベントを処理するために、アクティビティ自体の中で「dispatchKeyEvent」をオーバーライドしています。これは、たとえば、ユーザーがEnterキーを押したときにコマンドを送信し、入力の「selectAll()」を呼び出して、ユーザーが別のコマンドを入力できるようにするためです。カスタマイズされたEditTextウィジェットでOnKeyListenerインターフェイスを実装する場合でも、アクティビティで「dispatchKeyEvent」をオーバーライドする場合でも、まったく同じバグが発生しました。

アプリでビットマップを使用していますが、ガベージコレクションが行われるたびにヒープが約90%いっぱいになりますが、これは非常に頻繁に発生します。問題がメモリに関連しているかどうかはわかりません。より多くのスペースが必要な場合はヒープが大きくなるため、そうは思われません。

アプリを使用するときは、Bluetoothキーボードを入力します。おそらくBluetoothドライバーはいくつかの問題を引き起こす可能性がありますが、他のアプリでバグが発生することはめったにありません(Chromeで発生するのは数回だけだと思います)。これは、私のアプリに入るキーストロークの約1%で発生します(このアプリを使用するのは入力するため、非常に頻繁に発生します)。

LogCatをチェックするためにアプリをAlt-Tabキーを押すたびに、IInputConnectionWrapperの警告が表示されます。「非アクティブなInputConnectionでbeginBatchEdit」と他の2つの同様のメッセージが表示されます。警告が問題に関連しているとは思いませんが、確かにはわかりません。

誰もがこのバグを引き起こす可能性があるものについての予感がありますか?または、バグを特定してどこから来ているのかを知る方法を知っている人はいますか?Bluetoothキーボードの「ヘルパー」アプリをダウンロードしようとしましたが、どれも何も変わりませんでした。マニフェストのアプリケーションタグに「android:largeHeap = "true"」を設定しようとしましたが、ヒープが大きくなることはありませんでした(minSdk8とtargetSdk11を使用)。

4

2 に答える 2

0

dispatchKeyEventでEnterキーを押すことを処理するために、オーバーライドなどを行う必要はありませんEditText。代わりに、android:imeOptionsアクションを正しく設定し(たとえばactionSend、キーボードの[送信]ボタンの場合)、OnEditorActionListenerActivityとして登録します。これにより、ユーザーがアクションボタンをクリックするか、Enterキーを押すたびにコールバックが取得されます。EditText

于 2013-03-23T02:45:57.233 に答える
0

問題はBluetoothキーボード自体でした。AndroidではなくMac用でした。私は新しいキーボードを手に入れました、問題は解決しました。

于 2013-03-30T16:30:46.373 に答える