Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

深入RxJava——UndeliverableException之谜 #213

Open
soapgu opened this issue Jul 27, 2023 · 0 comments
Open

深入RxJava——UndeliverableException之谜 #213

soapgu opened this issue Jul 27, 2023 · 0 comments
Labels
problem problem or trouble ReactiveX ReactiveX 安卓 安卓

Comments

@soapgu
Copy link
Owner

soapgu commented Jul 27, 2023

  • 起因

一个偶然的机会,我发现我的安卓app竟然崩了!
这个bug有些不寻常的点

  1. 奇怪的点在于我所有的RxJava都做了Exception的handle,但是仍然报错
E  │ ----------UncaughtException throw--------- : io.reactivex.rxjava3.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.InterruptedException
E  │ 	at io.reactivex.rxjava3.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:372)
  1. 不是必现

这对追查问题就增加难度了

  1. “感觉上”是我先捕获到错误,而后面又throw了

因为我处理Excetion的打印后面出现的UndeliverableException,而inner excetion看起来也是一样的

  • 制造“事故”现场

这个错误以前我在项目也碰到过,但是复线率太低最后不了了之了。
这次重现出来虽然是也不是必现,但是重现率非常高,那是这次不可能放他走了

  • 情况分析
    这次复现率高有这样的情况
  1. 异步高并发
    这次的报错点在一个http的下载,是同时下载7张图片,7个下载队列同时开启

  2. 正常的http报错率高
    由于服务的问题,我所有的http执行都是403报错,等于http层的出错率是 100%

这样就可以制造一个案发现场,看看能不能重现

private Single<String> delayResult( int second , boolean error ){
        return Single.<String>create( emitter -> {
            Logger.i("ready emit");
            Thread.sleep(second * 1000L);
            Logger.i("begin to emit");
            if(error){
                emitter.onError( new Exception("some logic error") );
            }else {
                emitter.onSuccess(String.format("%s ok",second));
            }
        } ).subscribeOn(Schedulers.io());
    }

先创建单个异步Single

private Observable<String> mergedRx(boolean error ){

        return Observable.merge( delayResult(1,error).toObservable(),
                delayResult(1,error).toObservable(),
                delayResult(1,error).toObservable(),
                delayResult(1,error).toObservable());
    }

然后再聚合4个Single对象为一个Observable对象

先看看正常执行情况

disposables.add( this.mergedRx( false )
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe( t-> {
                                Logger.i("on next %s",t);
                                msg.setText( t );
                            },
                            throwable -> {
                                Logger.i("on error:%s",throwable.getMessage());
                                msg.setText( "on error"+throwable.getMessage() );
                            },
                            ()-> msg.setText("Rx Complete")));
图片

接下来就是模拟同时出错的情况了

disposables.add( this.mergedRx( true )
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe( t-> {
                                Logger.i("on next %s",t);
                                msg.setText( t );
                            },
                            throwable -> {
                                Logger.i("on error:%s",throwable.getMessage());
                                msg.setText( "on error"+throwable.getMessage() );
                            },
                            ()-> msg.setText("Rx Complete")));
图片

终于重现了!
图片

  • 错误详细分析

先看日志部分

2023-07-26 22:58:13.838 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:13.838 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: main
2023-07-26 22:58:13.838 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:13.838 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  │ Instrumentation.callApplicationOnCreate  (Instrumentation.java:1192)
2023-07-26 22:58:13.838 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  │    App.onCreate  (App.java:29)
2023-07-26 22:58:13.838 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:13.838 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  │ -------APP Create-------
2023-07-26 22:58:13.838 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:17.373 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:17.373 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-1
2023-07-26 22:58:17.373 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:17.373 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-26 22:58:17.373 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:53)
2023-07-26 22:58:17.373 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:17.373 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  │ ready emit
2023-07-26 22:58:17.373 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:17.373 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:17.373 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-3
2023-07-26 22:58:17.373 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:17.373 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-26 22:58:17.373 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:53)
2023-07-26 22:58:17.373 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:17.373 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  │ ready emit
2023-07-26 22:58:17.373 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:17.374 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:17.374 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-2
2023-07-26 22:58:17.374 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:17.374 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-26 22:58:17.374 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:53)
2023-07-26 22:58:17.374 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:17.374 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           I  │ ready emit
2023-07-26 22:58:17.374 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:17.374 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:17.374 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-4
2023-07-26 22:58:17.374 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:17.374 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-26 22:58:17.374 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:53)
2023-07-26 22:58:17.374 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:17.374 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  │ ready emit
2023-07-26 22:58:17.374 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:18.374 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:18.374 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-1
2023-07-26 22:58:18.374 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:18.375 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-26 22:58:18.375 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:55)
2023-07-26 22:58:18.375 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:18.375 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  │ begin to emit
2023-07-26 22:58:18.375 16126-16168 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:18.376 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:18.376 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-4
2023-07-26 22:58:18.376 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:18.376 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-26 22:58:18.376 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:55)
2023-07-26 22:58:18.377 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:18.377 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  │ begin to emit
2023-07-26 22:58:18.377 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:18.388 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:18.389 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: main
2023-07-26 22:58:18.389 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:18.389 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda2.accept  (null:4)
2023-07-26 22:58:18.389 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$onCreate$1$com-aaa-rxundeliverable-MainActivity  (MainActivity.java:36)
2023-07-26 22:58:18.389 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:18.389 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  │ on error:some logic error
2023-07-26 22:58:18.389 16126-16126 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:18.390 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:18.390 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-3
2023-07-26 22:58:18.390 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:18.390 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-26 22:58:18.390 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:55)
2023-07-26 22:58:18.390 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:18.390 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  │ begin to emit
2023-07-26 22:58:18.390 16126-16170 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:18.391 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ Thread: RxCachedThreadScheduler-2
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ App$$ExternalSyntheticLambda0.uncaughtException  (null:2)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │    App.lambda$onCreate$0$com-aaa-rxundeliverable-App  (App.java:18)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ ----------UncaughtException throw--------- : io.reactivex.rxjava3.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.InterruptedException
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:372)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.internal.operators.single.SingleCreate$Emitter.onError(SingleCreate.java:82)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:43)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:644)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:65)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:56)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at java.lang.Thread.run(Thread.java:923)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ Caused by: java.lang.InterruptedException
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at java.lang.Thread.sleep(Native Method)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at java.lang.Thread.sleep(Thread.java:442)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at java.lang.Thread.sleep(Thread.java:358)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at com.aaa.rxundeliverable.MainActivity.lambda$delayResult$4(MainActivity.java:54)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at com.aaa.rxundeliverable.MainActivity$$ExternalSyntheticLambda0.subscribe(Unknown Source:4)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:40)
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	... 10 more
2023-07-26 22:58:18.392 16126-16169 rx-undeliverable        com.aaa.rxundeliverable           E  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:18.393 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-26 22:58:18.393 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ Thread: RxCachedThreadScheduler-4
2023-07-26 22:58:18.393 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:18.393 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ App$$ExternalSyntheticLambda0.uncaughtException  (null:2)
2023-07-26 22:58:18.393 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │    App.lambda$onCreate$0$com-aaa-rxundeliverable-App  (App.java:18)
2023-07-26 22:58:18.393 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ ----------UncaughtException throw--------- : io.reactivex.rxjava3.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.Exception: some logic error
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:372)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.internal.operators.single.SingleCreate$Emitter.onError(SingleCreate.java:82)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at com.aaa.rxundeliverable.MainActivity.lambda$delayResult$4(MainActivity.java:57)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at com.aaa.rxundeliverable.MainActivity$$ExternalSyntheticLambda0.subscribe(Unknown Source:4)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.internal.operators.single.SingleCreate.subscribeActual(SingleCreate.java:40)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4855)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:644)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:65)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:56)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	at java.lang.Thread.run(Thread.java:923)
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ Caused by: java.lang.Exception: some logic error
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  │ 	... 13 more
2023-07-26 22:58:18.394 16126-16171 rx-undeliverable        com.aaa.rxundeliverable           E  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
---------------------------- PROCESS ENDED (16126) for package com.aaa.rxundeliverable ----------------------------

梳理一下整个进程

  1. 开始阶段
    执行顺序分别是
    Thread: RxCachedThreadScheduler-1
    Thread: RxCachedThreadScheduler-3
    Thread: RxCachedThreadScheduler-2
    Thread: RxCachedThreadScheduler-4

  2. emit 结果阶段

Thread: RxCachedThreadScheduler-1
Thread: RxCachedThreadScheduler-4
Thread: RxCachedThreadScheduler-3
注:
Thread: RxCachedThreadScheduler-2没有到emit阶段,还在sleep

  1. subscribe阶段
    Thread: RxCachedThreadScheduler-1 第一个抛出异常并被捕获
    Thread: RxCachedThreadScheduler-4 第二个抛出异常但是未被捕获,被RxJavaPlugins.onError捕获
    Thread: RxCachedThreadScheduler-2 没有抛出异常但是取消sleep的时候产生了InterruptedException,被RxJavaPlugins.onError捕获
    Thread: RxCachedThreadScheduler-3 第三个抛出异常,还未被捕获(可能进程已经退出)

完成时间线图
图片

  • 揭开UndeliverableException面纱

从RxJava的github仓库的issue区入手比较直接

最终指向了RxJava的文档

看来还是要仔细看文档啊!这个特性从2.0就开始了
第一句话已经很清晰了,One important design requirement for 2.x is that no Throwable errors should be swallowed。
任何错误都不应该被“吞掉”。

对于Rx来说第一个异常被抛出的时候,实际上生命周期已经结束了。
其他的Rx都会被取消,但是如果是并发的情况,几乎同时抛出异常,但是这时订阅已经dispose掉了,后面的异常实际上就发不出来了。
这个时候所有异常就会被汇聚到RxJavaPlugins.onError handler。
这个handle实际是可以被重写到的,通过RxJavaPlugins.setErrorHandler(Consumer)实现。
如果保持默认(不重写),RxJava defaults to printing the Throwable's stacktrace to the console and calls the current thread's uncaught exception handler.就是崩溃了,RxJava也是够决绝子的。

  • 问题修复

根据文档提示,在Application里面增加下面代码

RxJavaPlugins.setErrorHandler(e -> {
            if (e instanceof UndeliverableException) {
                e = e.getCause();
            }
            if ((e instanceof IOException) || (e instanceof SocketException)) {
                // fine, irrelevant network problem or API that throws on cancellation
                return;
            }
            if (e instanceof InterruptedException) {
                // fine, some blocking code was interrupted by a dispose call
                return;
            }
            if ((e instanceof NullPointerException) || (e instanceof IllegalArgumentException)) {
                // that's likely a bug in the application
                Thread.currentThread().getUncaughtExceptionHandler()
                        .uncaughtException(Thread.currentThread(), e);
                return;
            }
            if (e instanceof IllegalStateException) {
                // that's a bug in RxJava or in a custom operator
                Thread.currentThread().getUncaughtExceptionHandler()
                        .uncaughtException(Thread.currentThread(), e);
                return;
            }
            Logger.w("Undeliverable exception received, not sure what to do", e);
        });

程序不再异常了

--------------------------- PROCESS STARTED (25566) for package com.aaa.rxundeliverable ----------------------------
2023-07-27 15:24:19.005 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:19.005 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: main
2023-07-27 15:24:19.005 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:19.005 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  │ Instrumentation.callApplicationOnCreate  (Instrumentation.java:1192)
2023-07-27 15:24:19.005 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  │    App.onCreate  (App.java:63)
2023-07-27 15:24:19.005 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:19.005 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  │ -------APP Create-------
2023-07-27 15:24:19.005 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:28.208 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:28.208 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-1
2023-07-27 15:24:28.208 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:28.208 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-27 15:24:28.209 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:53)
2023-07-27 15:24:28.209 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:28.209 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  │ ready emit
2023-07-27 15:24:28.209 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:28.209 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:28.209 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-4
2023-07-27 15:24:28.209 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:28.209 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-27 15:24:28.209 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:53)
2023-07-27 15:24:28.209 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:28.209 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  │ ready emit
2023-07-27 15:24:28.209 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:28.209 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:28.209 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-3
2023-07-27 15:24:28.209 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:28.209 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-27 15:24:28.209 25566-25647 rx-undeliverable        com.aaaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:53)
2023-07-27 15:24:28.209 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:28.209 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  │ ready emit
2023-07-27 15:24:28.209 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:28.209 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:28.209 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-2
2023-07-27 15:24:28.209 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:28.210 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-27 15:24:28.210 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:53)
2023-07-27 15:24:28.210 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:28.210 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  │ ready emit
2023-07-27 15:24:28.210 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.210 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.210 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-1
2023-07-27 15:24:29.210 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.210 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-27 15:24:29.210 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:55)
2023-07-27 15:24:29.210 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.210 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  │ begin to emit
2023-07-27 15:24:29.210 25566-25645 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.210 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.210 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-4
2023-07-27 15:24:29.210 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.210 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-27 15:24:29.210 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:55)
2023-07-27 15:24:29.210 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.210 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  │ begin to emit
2023-07-27 15:24:29.210 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.211 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.211 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-3
2023-07-27 15:24:29.211 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.211 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-27 15:24:29.211 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:55)
2023-07-27 15:24:29.211 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.211 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  │ begin to emit
2023-07-27 15:24:29.211 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.220 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           W  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.220 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           W  │ Thread: RxCachedThreadScheduler-3
2023-07-27 15:24:29.220 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           W  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.220 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           W  │ App$$ExternalSyntheticLambda1.accept  (null:2)
2023-07-27 15:24:29.220 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           W  │    App.lambda$onCreate$1  (App.java:60)
2023-07-27 15:24:29.220 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           W  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.220 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           W  │ Undeliverable exception received, not sure what to do
2023-07-27 15:24:29.220 25566-25647 rx-undeliverable        com.aaa.rxundeliverable           W  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.221 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.221 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: main
2023-07-27 15:24:29.221 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.221 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda2.accept  (null:4)
2023-07-27 15:24:29.221 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$onCreate$1$com-aaa-rxundeliverable-MainActivity  (MainActivity.java:36)
2023-07-27 15:24:29.221 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.221 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  │ on error:some logic error
2023-07-27 15:24:29.221 25566-25566 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.221 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           W  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.222 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           W  │ Thread: RxCachedThreadScheduler-4
2023-07-27 15:24:29.222 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           W  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.223 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           W  │ App$$ExternalSyntheticLambda1.accept  (null:2)
2023-07-27 15:24:29.223 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           W  │    App.lambda$onCreate$1  (App.java:60)
2023-07-27 15:24:29.223 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           W  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.223 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           W  │ Undeliverable exception received, not sure what to do
2023-07-27 15:24:29.223 25566-25648 rx-undeliverable        com.aaa.rxundeliverable           W  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.223 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  │ Thread: RxCachedThreadScheduler-2
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  │ MainActivity$$ExternalSyntheticLambda0.subscribe  (null:4)
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  │    MainActivity.lambda$delayResult$4  (MainActivity.java:55)
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  │ begin to emit
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           I  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           W  ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           W  │ Thread: RxCachedThreadScheduler-2
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           W  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           W  │ App$$ExternalSyntheticLambda1.accept  (null:2)
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           W  │    App.lambda$onCreate$1  (App.java:60)
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           W  ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           W  │ Undeliverable exception received, not sure what to do
2023-07-27 15:24:29.224 25566-25646 rx-undeliverable        com.aaa.rxundeliverable           W  └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
---------------------------- PROCESS ENDED (25566) for package com.aaa.rxundeliverable ----------------------------

看日志很清晰
1号线程 抛出异常被订阅捕获并抛出
2号、3号、4号线程的异常全部被阻塞,以Undeliverable exception 的形式被RxJavaPlugin的Error Handel处理。
完美解决,🎉

@soapgu soapgu added 安卓 安卓 ReactiveX ReactiveX problem problem or trouble labels Jul 27, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
problem problem or trouble ReactiveX ReactiveX 安卓 安卓
Projects
None yet
Development

No branches or pull requests

1 participant