1. ホーム
  2. android

[解決済み] Androidでグローバルな未捕捉例外ハンドラを設定する理想的な方法

2023-03-29 16:50:43

質問

Androidアプリケーションのすべてのスレッドに対して、グローバルな未捕捉例外ハンドラを設定したいのです。そのため、私の Application サブクラスで Thread.UncaughtExceptionHandler をキャッチされない例外のデフォルトハンドラとして設定します。

Thread.setDefaultUncaughtExceptionHandler(
                new DefaultExceptionHandler(this));

私の実装では、(1) のように AlertDialog に適切な例外メッセージを表示するようにしています。

しかし、これはうまくいかないようです。処理されないスレッドで例外がスローされると、常に OS デフォルトのダイアログ ("Sorry! -Application-has-stopped-unexpectedly dialog") が表示されます。

捕捉されない例外のデフォルト ハンドラを設定するための、正しく理想的な方法は何ですか?

どのように解決するのですか?

これだけでよいはずです。 (その後、必ずプロセスを停止させてください。)

最初に確認することは、Android ハンドラーがまだ呼び出されているかどうかです。 あなたのバージョンが呼び出されているが致命的に失敗し、system_server がプロセスのクラッシュを見たときに一般的なダイアログを表示している可能性があります。

ハンドラーのトップにいくつかのログメッセージを追加して、そこに到達しているかどうかを確認します。 getDefaultUncaughtExceptionHandler からの結果を出力し、それから捕捉されない例外を投げてクラッシュを引き起こします。 logcat の出力に注目して、何が起こっているのかを見てください。