2

私は比較的スタックオーバーフローが初めてです。

Android アプリケーションに独自の uncaughtException ハンドラを実装しました。問題は、アクティビティの 1 つで未処理の例外が 1 つ発生すると、メソッド「uncaughtException」が複数回呼び出されることです。

キャッチされていない例外の処理を担当するクラス全体を次に示します。

public class CustomUncaughtExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {

 private UncaughtExceptionHandler defaultUEH;
public CustomUncaughtExceptionHandler(UncaughtExceptionHandler defaultHandler) {

    defaultUEH = defaultHandler;
    Log.w("cmhandler","setted default UEH");
}

public void uncaughtException(Thread thread, Throwable exception) {
    Log.w("cmhandler","uncaughtException");
    Helper.Log_e("CustomUncaughtExceptionHandler", "uncaughtException", exception);

    defaultUEH.uncaughtException(thread, exception);
}

}

この行Helper.Log_e("CustomUncaughtExceptionHandler", "uncaughtException", exception);は例外をファイルに保存するだけで、例外はスローされません。

次のようにアクティビティにクラスを実装しました。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Thread.setDefaultUncaughtExceptionHandler(new CustomUncaughtExceptionHandler(Thread.getDefaultUncaughtExceptionHandler()));

アプリを実行し、アクティビティの oncreate にそのようなものを挿入すると (上記のコードの後)

String i = null;
    i.length();

例外は正しく処理され、FC ダイアログもポップアップします。ここまでは順調ですが、ログを調べたところ、メソッド uncaughtException が複数回呼び出されていることがわかりました。

編集: 通常、メソッドは 2 ~ 6 回呼び出され、defaultUEH の設定からのログはログに 1 回だけ表示されます。

他の誰かがそのような行動をまだ持っていましたか?または、誰かが私が間違っていることのヒントを持っていますか?

よろしくお願いします schw4ndi

4

1 に答える 1

0

私の間違いは、onCreate の evrey アクティビティでデフォルトの Exceptionino ハンドラーを設定したことでした。

クラスをシングルトンにすることで解決しました。したがって、デフォルトのハンドラーは一度だけ設定されます。

于 2013-02-28T09:13:22.200 に答える