簡體   English   中英

處理程序消息中未捕獲異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM