单发射器Rx Java的返回值



如何从Rx Java 中的单个可观测值返回值

fun fetchRunResult() : Single<Boolean>{
return Single.just(false)
}
fun canRun() : Boolean {
return person.fetchRunResult() // get boolean instead of Single
}

反应和非反应世界之间的转换通过以下方式完成:阻止呼叫或订阅

为什么使用反应式?

  • 组成不带回调地狱的异步事件流
  • 将系统设计为流

将反应型转换为非反应型:阻塞

fun canRun() : Boolean {
return person.fetchRunResult().blockingGet()
}

使用此方法,您可以只阻塞调用线程,直到有值可用为止。

阻塞调用线程有什么问题?

  • 值可能永远不会到达,因此一个线程将永远被阻塞
  • 如果被阻塞的线程是一个ui循环,则ui将被冻结,因为该线程正在CountDownLatch上等待阻塞(实现详细信息(

我应该在反应型和非反应型之间转换吗?

我建议谨慎使用。要么您知道源是同步的,要么您现在知道某个值已经可用。因此#blockingGet不会阻止调用线程

当源是异步的时,有什么替代方案?

对流进行建模,并在生命周期切换容器中使用#subscribe。例如,"活动"提供了生命周期方法。使用订阅时,调用/订阅线程不会被阻止。每当有新值可用时,您都会得到一个回调。这里唯一需要注意的是像在Disposable中一样清理资源,因为不这样做可能会导致反应类型的泄漏。

摘要:

  • 如果您的数据是异步的,您的API应该反映这一点,而不是在响应<-><->之间切换无反应的
  • 不要使用blockingGet possible,因为这可能会导致线程被永久阻塞

相关内容

  • 没有找到相关文章

最新更新