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つが上記のハンドラでキャッチできるなら最高だね。文句なし!