странный вывод Logcat при отклонении пользовательской клавиатуры - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть пользовательское приложение клавиатуры, и я получаю этот вывод LogCat примерно в 1/4 времени, когда нажимаю кнопку «Назад», чтобы выйти из него:

12-19 13:18:13.908: W/InputMethodManager(361): IME died: com.mypackage/.MyActivity dropping: KeyEvent{action=1 code=4 repeat=0 meta=0 scancode=158 mFlags=72}
12-19 13:18:13.908: W/InputMethodManager(361): android.os.DeadObjectException
12-19 13:18:13.908: W/InputMethodManager(361):  at android.os.BinderProxy.transact(Native Method)
12-19 13:18:13.908: W/InputMethodManager(361):  at com.android.internal.view.IInputMethodSession$Stub$Proxy.dispatchKeyEvent(IInputMethodSession.java:277)
12-19 13:18:13.908: W/InputMethodManager(361):  at android.view.inputmethod.InputMethodManager.dispatchKeyEvent(InputMethodManager.java:1344)
12-19 13:18:13.908: W/InputMethodManager(361):  at android.view.ViewRoot.deliverKeyEvent(ViewRoot.java:2426)
12-19 13:18:13.908: W/InputMethodManager(361):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1741)
12-19 13:18:13.908: W/InputMethodManager(361):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-19 13:18:13.908: W/InputMethodManager(361):  at android.os.Looper.loop(Looper.java:123)
12-19 13:18:13.908: W/InputMethodManager(361):  at android.app.ActivityThread.main(ActivityThread.java:4627)
12-19 13:18:13.908: W/InputMethodManager(361):  at java.lang.reflect.Method.invokeNative(Native Method)
12-19 13:18:13.908: W/InputMethodManager(361):  at java.lang.reflect.Method.invoke(Method.java:521)
12-19 13:18:13.908: W/InputMethodManager(361):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-19 13:18:13.908: W/InputMethodManager(361):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-19 13:18:13.908: W/InputMethodManager(361):  at dalvik.system.NativeStart.main(Native Method)

Кто-нибудь сталкивался с этим раньше??

Вот код, который у меня есть при переопределении кнопки возврата

if(mInputView.getVisibility() == View.VISIBLE){

    if(isInputViewShown()){
        if(output != null){
             if(getCurrentInputConnection() != null){
                       getCurrentInputConnection().deleteSurroundingText(1000, 1000);
                       getCurrentInputConnection().commitText(output.getText(), output.length());
             }
        output.setText("");
    }

    requestHideSelf(0);
    return true;
}else return false;

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

Поиск в Google по запросу "android.os.DeadobjectException IME" дает следующее значение: http://osdir.com/ml/Android-Developers/2010-10/msg04248.html

Кажется, что исключение выдается, когда пользовательский интерфейс не имел возможности обработать все ключевые события до того, как IME будет убит. Это объясняет первую строку:

12-19 13:18:13.908: W/InputMethodManager(361): IME died: com.mypackage/.MyActivity dropping: KeyEvent{action=1 code=4 repeat=0 meta=0 scancode=158 mFlags=72}

Это сообщение не имеет большого значения, оно является результатом убийства IME перед тем, как иметь дело со всеми ключевыми событиями.

1 голос
/ 19 декабря 2011

Похоже, что вы получаете состояние гонки между отменой клавиатуры и отправкой события ключа, созданного нажатием кнопки назад. DeadObjectException означает, что, хотя объект (здесь KeyEvent) все еще используется, его основной процесс (IME) умер. Это делает объект недействительным и выдает исключение.

Вы можете увидеть это в параметрах KeyEvent. Код ключа 4, который является значением KeyEvent.KEYCODE_BACK.

Различные телефоны, вероятно, ведут себя здесь по-разному ( этот оставшийся без ответа вопрос похож). Я предполагаю, что исключение можно игнорировать.

...