【问题标题】:Schedulers.computation() is executed on MainThreadSchedulers.computation() 在 MainThread 上执行
【发布时间】:2016-06-03 13:07:39
【问题描述】:

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

.subscribeOn(Schedulers.computation())

onNext()
{
     touchEverythingInTheUiThreadFromBackgroundThread();
}

【问题讨论】:

  • 你能分享更多代码吗?事件的来源是什么?你不会混淆subscribeOnobserveOn 吗?
  • 先提出问题,删除垃圾

标签: java android multithreading rx-java networkonmainthread


【解决方案1】:

如果您想确保您的.doOnNext() 在指定的调度程序上执行,请将您的.subscribeOn() 更改为.observeOn()。直观地,.observeOn() 确定了之后的所有内容使用什么调度程序。

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

【讨论】:

    【解决方案2】:

    使用

        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()));
    

    【讨论】:

      猜你喜欢
      • 2020-03-27
      • 2020-05-19
      • 2021-10-17
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      相关资源
      最近更新 更多