后台阻止主线程的结果

时间:2018-12-03 17:12:45

标签: android rx-java2

当前,我遇到一个奇怪的错误,似乎无法修复自己。

this.mViewModel
                .getTimeFrameFlowable()
                .subscribeOn(Schedulers.io())
                .map(new DataHistoryRequest(Fitness.getHistoryClient(this.getActivity(),GoogleSignIn.getLastSignedInAccount(this.getContext()))))
                .map(new Function<DisplayData, DisplayData>() {
                    @Override
                    public DisplayData apply(DisplayData displayData) throws Exception {
                        Timber.d("Intercept %s", Thread.currentThread().getName());
                        return displayData;
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<DisplayData>() {
                    @Override
                    public void accept(DisplayData displayData) throws Exception {
                        Timber.d("recieved data");
                        mChart.setData(displayData.getLineData());
                        mChart.invalidate();
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        Timber.e(throwable);
                    }
                });

上面的代码在应将数据返还给主线程的情况下仍能正常工作,但此时它只是阻塞了主线程,应用程序挂起。

调试行用

给出
  

拦截RxComputationThreadPool-2

指示到目前为止的工作尚未在主线程上完成。但是错误使用者和下一个使用者都不会被调用一次。因此,它在第二个map函数和subscription函数之间的某个位置崩溃。

0 个答案:

没有答案