gpt4 book ai didi

android - Schedulers.io() 不返回主线程

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:25 24 4
gpt4 key购买 nike

我正在使用 RxParse 来解析查询的异步加载,但是当我使用 subscribeOn(Schedulers.io()) 订阅我的可观察对象时,我的 onCompleted 方法从未在主线程上被调用。取而代之的是,我的 onCompleted 方法在工作线程池内部被调用。如果我使用 observeOn(AndroidSchedulers.mainThread) 一切都会正常工作,但我的 onNextMethod 也会在主线程上调用,我不想要它。

我的代码有问题吗?

我的代码有什么问题吗?

ParseObservable.find(myQuery)
.map(myMapFunc())
.subscribeOn(AndroidSchedulers.handlerThread(new Handler()))
.subscribe(
new Subscriber<MyObj>() {
@Override
public void onError(Throwable e) {
Log.e("error","error",e);
}

@Override
public void onNext(T t) {
// ... worker thread (but here is ok)
}

public void onCompleted() {
// ... worker thread again instead of mainThread
}
}
)
);

最佳答案

首先您需要了解subscribeOn()observeOn() 之间的区别。这是两个完全不同的运算符,它们影响 Rx 链的不同部分。

subscribeOn() 指定您的 Observable 将在哪里工作。它不会影响 onNext()onError()onComplete() 的执行位置。

observeOn() 指定执行回调(例如 onNext())的位置。它不会影响您的 Observable 在哪里工作。

所有回调都将发生在同一个线程上。您不能通过任何 RxJava API 指定某些回调发生在一个线程上,而某些回调发生在另一个线程上。如果那是您想要的行为,您将必须在回调中自己实现它。

关于android - Schedulers.io() 不返回主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34272955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com