状況は非常に複雑ですが、私はそれを説明しようとします。 (コードは実際のアプリケーションから簡略化されています)ハンドラメッセージに例外がキャッチされない
私はルーパー付きのカスタムスレッド上にハンドラを持っています。 私はそれにメッセージを送信:
...
handler.obtainMessage(...)
.sendToTarget();
...
ハンドラは、メッセージ・コールバックを持っています
private final Handler.Callback callback = new Handler.Callback() {
public boolean handleMessage(Message msg) {
try {
//The hard work is here
SystemClock.sleep(5000)
throw new CustomException();
} catch (CustomException e) {
}
//...
//Sending the result back to the UI thread here.
//...
}
return true;
}
};
私はこのメッセージを送る上RxJavaラッパーを持っています。
私が購読しているのなら、everythigは大丈夫です。 しかし、もし私がサブスクライブするなら、例外を捕捉せずにアプリケーションをクラッシュしてください。 RxJavaラッパーは、onSubscribe
でメッセージを送信する以外は何もしません。
どのようなsuggesions、どのように可能ですか?
スタックトレース:
08-01 10:02:58.422 13655-13655/com.mycompany.myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mycompany.myapp, PID: 13655
com.mycompany.myapp.util.CustomException
com.mycompany.myapp.util.LooperThread$1.handleMessage(LooperThread.java:33)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:173)
at com.mycompany.myapp.util.neulion.LooperThread.run(LooperThread.java:57)
ここで、「ハンドラ」を作成しますか?どのようなパラメータで?おそらく 'HandlerThread'を使っていますか? – pskink
いいえ、それは 'HandlerThread'ではありません。それはちょうど 'スレッド'私は 'スレッド'コンストラクタでそれを作成し、またルーペです。 –
だから、どうなっていますか? – pskink