首页 > 解决方案 > 行为主题 onnext on next on different thread

问题描述

我想在 b.subject 调用 onnext 时更改线程

    var bs: BehaviorSubject<CarResponse?> = BehaviorSubject.create<CarResponse?>();

 bs
                .observeOn(Schedulers.io())
                .doOnNext { service.GetMakeForManufacturer(q)
                    .subscribeOn(Schedulers.io())
                    .observeOn(Schedulers.io())
                    .blockingSingle()!! }

所以我需要使改造服务调用异步。它只能改变线程。但结果是无用的。我怎样才能为 onnext 而不是 doonnext() 做呢?

此代码在主线程和块上运行

bs
            //.observeOn(Schedulers.io())
            .onNext(service.GetMakeForManufacturer(q)
                .subscribeOn(Schedulers.io())
                .observeOn(Schedulers.io())
                .blockingSingle()!!)

甚至它的(bs.onnext)仍在主线程上运行

  var bs: BehaviorSubject<CarResponse?> = BehaviorSubject.create<CarResponse?>();

        fun call(q: String): BehaviorSubject<CarResponse?>? {
            Log.e("Pageviewmodel",Thread.currentThread().name)
            service.GetMakeForManufacturer(q)
                .subscribeOn(Schedulers.io())
                .observeOn(Schedulers.newThread())
                .subscribe({s-> run { bs.onNext(s!!); Log.e("Pageviewmodel", Thread.currentThread().name) } })

标签: javaandroidkotlin

解决方案


推荐阅读