【发布时间】:2017-09-06 08:23:41
【问题描述】:
假设我有以下适用于 Android 的案例:
- 从网络请求组列表
- 为每个组显示一些 UI 元素
- 为每个组请求项目
- 显示 UI 元素 每个项目
我想用 RxJava 做到这一点:
webService.requestGroups()
.flatMap(group -> {
view.showGroup(group);
return webService.requestItems(group);
})
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(items -> view.showItems(items));
如您所见,我有 2 个视图对象调用,每个调用都必须在主线程上执行。以及 2 次 webService 调用,必须在后台线程上执行。
此代码的问题:第一次调用视图将在后台执行,这会导致 Android RuntimeException(只有原始线程可能会接触视图或其他东西)如果我将.observeOn 转移到链的开头 - 第二个 webService 调用将是在主线程中执行。
如何在 RxJava 链中多次“游过”线程?
【问题讨论】: