![](/img/trans.png)
[英]Isn't an unchecked exception that is caught in a try block a checked exception in Java?
[英]Exception isn't caught in a handler message
情況非常復雜,但我將盡力解釋。 (代碼從實際應用程序中簡化了)
我在帶有彎針的自定義線程上有一個處理程序。 我向它發送一條消息:
...
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很好。 但是,如果我確實訂閱了,則取消訂閱不會捕獲到異常,並且應用程序崩潰了。 除了在onSubscribe
發送消息外,RxJava包裝器不會做任何工作。
任何建議,怎么可能?
堆棧跟蹤:
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)
我發現了一個問題。 將RxJava更新到最新版本(2.1.2)后,堆棧跟蹤變得更加明顯。 而且我意識到,即使捕獲到異常,我也會在可觀察對象上調用onError
,但實際上我將異常存儲在catch
塊中(此處未顯示代碼)。
08-03 10:53:25.811 6822-6822/com.mycompany.myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mycompany.myapp, PID: 6822
io.reactivex.exceptions.UndeliverableException: java.lang.Exception: My exception
at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:349)
at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onError(ObservableCreate.java:74)
at com.mycompany.myapp.ui.screen.video.RxNeulion$1$1.onFailure(RxNeulion.java:29)
at com.mycompany.myapp.util.neulion.Neulion$Callback.run(Neulion.java:59)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7303)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.Exception: My exception
at com.mycompany.myapp.util.neulion.MyHandlerCb.handleMessage(MyHandlerCb.java:27)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:148)
at com.mycompany.myapp.util.neulion.LooperThread.run(
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.