android - 在 RxKotlin 中处理执行器

标签 android rx-java2 rx-kotlin2

我将使用线程执行器与 rxkotlin 一起做一些后台工作,我将线程池大小固定为 3,但我的问题是在我的后台操作期间它只使用了 3 个中的一个线程,这减慢了我的后台操作

执行者类

 class ThreadExe : Executor{

     companion object {
        private const val THREAD_POOL_SIZE = 3
    }

    private val executor: Executor = 
       Executors.newFixedThreadPool(THREAD_POOL_SIZE)

    override fun execute(runnable: Runnable) {
          executor.execute(runnable)
    }

}

上面是我负责创建线程的executor类。
我将调用我的后台任务,如下所示

 getSomeDataFromNetworkProcessWithDB()
    .subscribeOn(Schedulers.from(ThreadExe()))
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe()

fun getSomeDataFromNetworkProcessWithDB() {
    Observable.fromIteratable(someDataList())
            .flatMap {
                getSomeNetworkData()
            }
            .flatMap {
                doSomeDbOperation()
            }
}

上面代码的问题是所有这些网络和数据库操作都在同一个线程中按顺序工作,因为我们给了大小为 3 的线程池,它必须并行发送 3 个网络请求,但请求是按顺序进行的
谁能帮我解决这个问题?

最佳答案

如果你想单独的操作在不同的线程上运行,试试这个:

    getSomeDataFromNetworkProcessWithDB(Schedulers.from(ThreadExe()))
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe()
fun getSomeDataFromNetworkProcessWithDB(scheduler: Scheduler): Observable<Data> {
    return Observable.fromIterable(someDataList())
            .flatMap {
                getSomeNetworkData().subscribeOn(scheduler)
            }
            .flatMap {
                doSomeDbOperation().subscribeOn(scheduler)
            }
            .subscribeOn(scheduler) // optional, if you want fromIterable(), someDataList() to run on this scheduler.
}

关于android - 在 RxKotlin 中处理执行器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56424628/

相关文章:

java - 我正在尝试访问相机

android - 测试 Rx Java 间隔

android - 单一导致主线程上的网络或错误线程异常的查看根

android - 如何在智能卡读卡器中实现被动认证?

android - ExpandableListView - 选择元素

java - 在android中删除位图

android - 如何使用 RxJava 2 + Retrofit 2 进行 POST?

android - 如何取消订阅 RxJava 中的单个 Observable

android - 如何在 android 中处理 rxjava 链中的错误?