RxJava 和 Bolt 有什么区别?

what is the difference between RxJava and Bolts?

我研究过这个,我知道RXJava使用的是observable模式,而Bolts是依赖一个executor。什么框架适合处理需要按顺序完成的任务?

我听说过使用 singleExecutors、queues、chaining asynctasks 和这两个框架。我已经看到更多人使用 bolts 而不是 rxjava,但我很想听听人们在两者之间的经历。

谢谢!

我在不同的项目中都使用过,并且完成了从 Bolts 到 RxJava 的迁移。简单回答你的问题

What framework would be good for handling tasks that need to be done in sequences?

您是否可以轻松地使用任一框架来执行此操作。他们俩:

  • 允许一个接一个地链接任务
  • 允许为每个任务指定执行者等
  • 允许在方便的时候捕获和处理错误

然而,这就是 Bolts 功能几乎结束的地方,而 RxJava 只是继续提供。 RxJava 的真正力量在于它的运算符,除其他外,它允许您转换、组合和过滤数据。

这两个框架的学习曲线都很陡峭,RxJava 更陡峭...但它的功能要强大得多。

顺便说一句,这两个库的方法数是

RxJava - 4605
Bolts  - 479

Jahnold 给出了很好的概述,我只想添加更多信息:

首先,Bolts 和 RxJava 都是 Java Microsoft 异步编程模型的实现:Bolts = 任务并行化库和 RxJava = 响应式扩展。它们还都允许非常容易地进行链接和线程切换(后台 <-> 主线程)。

比较 Bolts/TPL 和 RxJava/Rx 的最佳方式是 Bolts 用于异步单值(promises)而 RxJava 用于异步值列表(流)。

  • 因此 Bolts 适合 return 单个值的后台工作,例如一般网络请求、从磁盘读取文件等
  • RxJava 适用于 return 多个值的事物,例如 订阅 GPS 坐标、onClick 事件等

为了更好地回答您的问题:

What framework would be good for handling tasks that need to be done in sequences?

我不得不问另一个:你打算让你的工作是单一结果还是多结果?

这两个库解决了两个不同的问题。

螺栓

Bolts 通过透明地将代码推送到后台线程来简化异步编程。 Bolts 还花费了大量精力试图减少难看的代码嵌套,这些嵌套会产生类似格式的嵌套金字塔。

因此,如果您特别希望处理异步(多线程)问题,Bolts 是更强大的解决方案之一。 Bolts 在减轻代码嵌套和回调样板方面也很有效,可能是解决回调问题的一个很好的解决方案。

RxJava

RxJava 专门设计用于支持响应式编程范例。在 Java 中,响应式编程是命令式编程的替代方案。您可能会出于各种原因选择转向反应式编程范例——其中有很多。如果你想将你的代码迁移到反应式编程模型,或者你想在你的新建项目中使用反应式,请考虑使用 RxJava - Java 世界中事实上的反应式标准。

Reactive 确实也解决了异步编程问题,并通过泛型减少了回调样板。但它不应该仅仅用来解决这些问题。例如,Bolts 解决嵌套金字塔代码结构的能力使其成为异步编程更可行的解决方案。另一方面,如果你通过 RxJava 使用反应式,异步问题已经解决,所以没有必要引入 Bolts。