Schedulers.computation()在MainThread上执行

时间:2016-06-03 13:07:40

标签: java android multithreading rx-java networkonmainthread

如何在后台线程中执行此代码?

.subscribeOn(Schedulers.computation())

onNext()
{
     touchEverythingInTheUiThreadFromBackgroundThread();
}

2 个答案:

答案 0 :(得分:1)

如果您想确保在指定的计划程序上执行.doOnNext(),请将.subscribeOn()更改为.observeOn()。直觉.observeOn()确定用于之后的所有事件的调度程序。

.subscribeOn()仅影响用于运行可观察创建的onSubscribe()方法的调度程序。以后发生的事情在很大程度上取决于您订阅的内容或@akarnokd所说的:您的活动来源是什么。假设将在.subscribeOn()中指定的调度程序上发出项目是不安全的。实际上,至少有一些例子表明这些假设并不成立。

答案 1 :(得分:0)

使用

    Observable.fromCallable(() -> Thread.currentThread().getName())
            .subscribeOn(Schedulers.computation())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(name -> Timber.d("Worker thread: %s, Handle thread: %s", name, Thread.currentThread().getName()));