RxAndroid阻止UI线程

时间:2017-09-20 19:41:44

标签: android android-asynctask rx-android rx-java2

我有一个简单的工作,就是使用GreenDao选择数据。此外,我想显示ProgressWheel,但此作业阻止UI线程。

    showLoader();

    DataManager.getInstance(this).getQuestions(0, 800)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .map(QuestionUtils::shuffleAnswers)
            .subscribe(this::onFinishLoad);

    public Observable<List<Question>> getQuestions(int offset, int limit) {
           return Observable.fromCallable(() -> daoSession.getQuestionDao().queryBuilder()
            .offset(offset)
            .limit(limit)
            .build().list());
}

1 个答案:

答案 0 :(得分:3)

由于您的操作顺序,它会阻止。

DataManager.getInstance(this)
        .getQuestions(0, 800)
        .map(QuestionUtils::shuffleAnswers)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(this::onFinishLoad);

应该解决它。否则,您可以订阅数据并在之后映射它们。

如果你想完成你的数据的加载,你可以在你的订阅方法中使用动作并处理你发出的nextData中的加载。

 .subscribe (nextData -> {},  error -> {}, () -> doCompletedStuff())