Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Rxjava与kotlin协程_Android_Kotlin_Kotlin Android Extensions_Kotlin Coroutines - Fatal编程技术网

Android Rxjava与kotlin协程

Android Rxjava与kotlin协程,android,kotlin,kotlin-android-extensions,kotlin-coroutines,Android,Kotlin,Kotlin Android Extensions,Kotlin Coroutines,我需要从rxkotlin链启动协同路由,但我不确定这是否正确,要从rx链启动协同路由,我使用runblocking启动挂起方法 示例 Single.just(someOperation()) .map{ someMethod(it) } .flatMap{ startCoroutines(suspend { someOpeartions() } ) // i will be starting the coroutines here } 协同程序 fun s

我需要从rxkotlin链启动协同路由,但我不确定这是否正确,要从rx链启动协同路由,我使用
runblocking
启动挂起方法
示例

Single.just(someOperation())
   .map{
     someMethod(it)
   }
  .flatMap{
    startCoroutines(suspend { someOpeartions() } ) // i will be starting the coroutines here
  }
协同程序

fun startCoroutines(suspendingObj : suspend () -> Any){
  runBlocking(newFixedThreadPoolContext(1,"Thread")){
       suspendingObj.invoke()
  }
}
上述代码是正确的方法还是有其他方法可以实现?
有人能帮我解决这个问题吗?

这个代码块根本上是错误的

  • 在您的情况下,实际上没有必要使用协同程序,因为您可以在
    flatMap
    之前使用
    observeOn
    轻松地更改Rx线程,并传递您想要的任何
    调度程序(如IO)
  • Kotlin协程的设计是为了避免
    线程
    ,因为创建
    线程
    是一项非常昂贵的操作。而你的函数
    startcoutlines
    会为每一个没有意义的操作创建一个新的线程,这可能会导致
    溢出
    。您可以在此处阅读更多信息:
  • 在决定使用
    runBlocking
    之前,您应该始终尝试找到更好的系统设计。阻塞线程从来不是一个好主意

  • 如果已经在链中,为什么需要协同路由?我想它应该是rx或协程。@TentenPonce这样做是错误的吗?为什么?rx已经是异步的,为什么要在它里面使用协程?如果您的目标是更改线程,那么rx
    .observeOn()
    已经支持该线程。你可以不用挂起,只需让它接收并添加到你当前的链上。阻塞几乎从来都不是一个好的选择,接收或不接收。可以连接这两种方法的转换器和构建器。例如