android - 主线程上的 RxJava onCompleted 和 onTerminate

标签 android retrofit rx-java rx-android

我在 Android 上使用 RxJava 和 Retrofit 2.0 来处理网络请求。

当我创建可观察对象时,我将以下内容添加到它:

observable = observable
    .observeOn(AndroidSchedulers.mainThread())
    .subscribeOn(Schedulers.io())
    .unsubscribeOn(Schedulers.io())

然后如果我添加:

observable = observable.doOnTerminate(new Action0() {
                @Override
                public void call() {
                    Log.d("OBS", "[" + Thread.currentThread().getName() + "] onTerminate");
                }
            });

或者类似于doOnErrordoOnCompleted,回调在IO线程上执行,而doOnNext在主线程上执行。

然而,我真正想要的是所有回调都转到主线程,但执行应该留在 IO 线程。

是否有一个优雅的解决方案,无需手动用 block 包装我的实现以将某些内容发布到主线程?

最佳答案

你应该将你的回调放在任何 observeOn 之前,这样它们就会留在之前的线程中:

Observable.range(1, 10)
.subscribeOn(Schedulers.io())
.doOnTerminate(() -> System.out.println(Thread.currentThread()))
.map(v -> v + 1)
.observeOn(AndroidSchedulers.mainThread())
.map(v -> Thread.currentThread() + " / " + v)
.doOnNext(v -> Log.d("OBS", v))
.subscribe();

关于android - 主线程上的 RxJava onCompleted 和 onTerminate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33469394/

相关文章:

java - Android:如何在内存中创建和保存 map View 以供所有 Activity 使用

android - Windows 管理器,单击自定义 Spinner 时出现错误 token 异常

android - 无法在 Retrofit 中为类创建 @Body 转换器

kotlin - RxJava 2.0 和 Kotlin Single.zip() 以及单曲列表

android - 如何将闪烁的光标添加到 editText

android - 如何在 Android 中使用 BroadcastAddress 获取计算机的 IP 地址

java - 使用 LoganSquare 从 JSON 反序列化嵌套字段

android - 无法在 Android Retrofit 库中为我的类(class)创建转换器

android - 在 Retrofit 2.0 中使用 Mockito

java - doOnError 没有捕获异常