【问题标题】:RxAndroid blocks UI threadRxAndroid 阻塞 UI 线程
【发布时间】:2017-09-20 19:41:44
【问题描述】:

我的工作很简单,就是使用 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());
}

【问题讨论】:

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


    【解决方案1】:

    由于您的操作顺序而阻塞。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      相关资源
      最近更新 更多