Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

Androidのグローバル例外ハンドラ

Javaでやっちゃいけないことの1つがtry-catchの散在だと思うんだよね。。。catchされて握りつぶされたらマジ最悪。スローしまくってええ。最後にまとめて捕まえたらいい。

で、調べてみるとこーうやってキャッチしろよって言ってる。


Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    public void uncaughtException(Thread t, Throwable e) {
        LoggerFactory.getLogger("CustomLogger").error("Uncaught Exception in thread '" + t.getName() + "'", e);
        System.exit(1);
    }
});

Androidの場合も上記のハンドラを利用して、アクティビティが実行しているUIスレッドでこいつをオーバーライドすればええやんって言ってる。なるほどね。Exceptionが発生する可能性がある処理の所は全てメソッド化してthrowsを付与しておいて、throwされた例外をキャッチするように実装するってことか。

気になるのは下記2点でも捕まえられるかどうか。

  • Fragmentで起きたUIスレッド上の例外
  • Asyncで実行しているUIスレッドではない例外

この2つが上記のハンドラでキャッチできるなら最高だね。文句なし!