0

私はカスタム キーボード アプリを使用しており、[戻る] ボタンを押して終了すると、約 1/4 の時間でこの LogCat 出力が得られます。

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;
4

2 に答える 2

2

「android.os.DeadobjectExceptionIME」をグーグル検索すると、次のようになります。http: //osdir.com/ml/Android-Developers/2010-10/msg04248.html

IMEが強制終了される前に、UIがすべての主要なイベントを処理する機会がなかった場合、例外がスローされるようです。それは最初の行を説明します:

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を強制終了した結果です。

于 2011-12-19T18:50:16.090 に答える
1

キーボードをキャンセルしてから、戻るボタンを押して生成されたキーイベントをディスパッチするまでの間に競合状態が発生しているようです。これDeadObjectExceptionは、オブジェクト(ここではKeyEvent)がまだ使用されているにもかかわらず、そのホストプロセス(IME)が停止したことを意味します。これにより、オブジェクトが無効になり、例外がスローされます。

これはKeyEventパラメータで確認できます。キーコードは4で、これはの値ですKeyEvent.KEYCODE_BACK

ここでは、電話が異なれば動作も異なる可能性があります(この未回答の質問も同様です)。例外は無視できると思います。

于 2011-12-19T18:50:41.923 に答える