2016-04-17 27 views
0

グローバルハンドラを実装して、アプリケーションで発生しない可能性のある例外をすべてキャッチしたいと考えています。Android未処理例外

プロジェクトではRxを使用しています。その文書に述べ

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 
    @Override 
    public void uncaughtException(Thread thread, Throwable ex) { 

    } 
}); 

RxJavaPlugins.getInstance().registerErrorHandler(new RxJavaErrorHandler() { 
    @Override 
    public void handleError(Throwable e) { 
     super.handleError(e); 
    } 
}); 

しかし、このハンドラもあります: は、「デフォルトのキャッチされない例外ハンドラを設定します。このハンドラは、ケース内の任意の呼び出された私は、このグローバルハンドラが見つかりました。スレッドが処理されないために処理されない」

「アプリケーション」クラス(メインエントリポイント)に「Thread.setDefaultUncaughtExceptionHandler」を配置すると、Rxメソッドの例外もキャッチされますか?

+0

'Thread.setDefaultExceptionHandler'などを使用してください。 – xdevs23

答えて

1

これらは、接線方向にのみ関連する2つの独立したユーティリティです。

UncaughtExceptionHandlerは、キャッチされていないシステムで検出されたExceptionです。キャッチされない例外はアプリをクラッシュさせるため、クラッシュトラッキングにデフォルトのUncaughtExceptionHandlerを使用することがよくあります。

RxJavaErrorHandlerは、RxJavaのログ記録用です。 すべて時間onErrorは、のいずれかのサブスクリプションに対して呼び出され、このメソッドを呼び出します。すでにonErrorが処理されているかどうかにかかわらず、それを呼び出すことはできません。また、あらゆる種類のフロー制御に使用するべきではありません。

UncaughtExceptionHandlerを使いたいと思うようですね。それは、アプリケーションが(RxJavaを含む)それ自体を処理しなかったものをキャッチします。

+0

ところで、あなたの目標がクラッシュを防ぐために例外をマスクすることであれば、私は強く警告します。これにより、アプリが使用できなくなることがあります。確かに、それはクラッシュしませんでしたが、今は決して奇妙な状態です。IMO、ちょうどクラッシュし、その後クラッシュをデバッグする方が良いです。 –