InputConnectionWrapper警告

Lea*_*ros 9 android warnings

每当我的应用程序可见时关闭屏幕,我都会收到一个InputConnectionWrapper警告.我不知道为什么,因为我不使用InputConnection.

这是LogCat输出.

09-07 14:21:31.716: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:31.724: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:31.724: W/IInputConnectionWrapper(24197): getTextBeforeCursor on inactive InputConnection
09-07 14:21:31.724: W/IInputConnectionWrapper(24197): getTextAfterCursor on inactive InputConnection
09-07 14:21:31.724: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:31.724: W/IInputConnectionWrapper(24197): getTextBeforeCursor on inactive InputConnection
09-07 14:21:31.724: W/IInputConnectionWrapper(24197): getTextAfterCursor on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): beginBatchEdit on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): endBatchEdit on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): getTextBeforeCursor on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): getTextAfterCursor on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): beginBatchEdit on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): endBatchEdit on inactive InputConnection
09-07 14:21:31.732: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:32.013: W/IInputConnectionWrapper(24197): showStatusIcon on inactive InputConnection
09-07 14:21:32.013: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getTextBeforeCursor on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getTextAfterCursor on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getTextBeforeCursor on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getTextAfterCursor on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): beginBatchEdit on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): endBatchEdit on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getTextBeforeCursor on inactive InputConnection
09-07 14:21:32.021: W/IInputConnectionWrapper(24197): getTextAfterCursor on inactive InputConnection
09-07 14:21:32.028: W/IInputConnectionWrapper(24197): beginBatchEdit on inactive InputConnection
09-07 14:21:32.028: W/IInputConnectionWrapper(24197): endBatchEdit on inactive InputConnection
09-07 14:21:32.028: W/IInputConnectionWrapper(24197): getExtractedText on inactive InputConnection
Run Code Online (Sandbox Code Playgroud)

Set*_*thu -7

事实证明,上面的用法InputConnectionWrapper是完全正确的。但是,commitText()gets 永远不会被调用(特殊情况除外),因为还有其他方法在键入期间使用。这些主要是setComposingText()sendKeyEvent()

然而,重写很少使用的方法(例如deleteSurroundingText()或 )commitText()以确保捕获每个用户输入也很重要,因为我遇到了类似的问题。

我的情况:我有一个EditText用户输入的视图。EditText当用户按下按钮时,该值会被清除。InputConnection当我快速按下按钮时,大量非活动条目会流出。

例如editText.setText(null);

上面我的 logcat 中的最后一行很好地表明了正在发生的事情。果然,InputConnection清除文本的请求已被淹没。我尝试修改代码以检查文本长度,然后再尝试清除它:

if (editText.length() > 0) {
    editText.setText(null);
}
Run Code Online (Sandbox Code Playgroud)

这有助于缓解快速按下按钮不再导致IInputConnectionWrapper警告流的问题。然而,当用户在键入内容和按下按钮之间快速交替或在应用程序负载充足时按下按钮等时,这仍然容易出现问题。

幸运的是,我找到了另一种清除文本的方法:Editable.clear()。这样我根本就不会收到警告:

if (editText.length() > 0) {
    editText.getText().clear();
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果您希望清除所有输入状态而不仅仅是文本(自动文本、自动大写、多次点击、撤消),您可以使用TextKeyListener.clear(Editable e).

if (editText.length() > 0) {
    TextKeyListener.clear(editText.getText());
}
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关输入连接包装器的更多信息,请访问下面的链接。

http://developer.android.com/reference/android/view/inputmethod/InputConnection.html

  • 看来您几乎逐字复制了 Johnson Wong 在 http://stackoverflow.com/questions/8122625/getextractedtext-on-inactive-inputconnection-warning-on-android 的答案 (16认同)