RxJava和Bolts有什么区别?

7

我已经研究过,知道RXJava使用的是可观察模式,Bolts则依赖于执行器。哪个框架适合处理需要按顺序完成的任务?

我听说过使用单个执行器、队列、链接异步任务和这两个框架的方法。我看到更多人使用bolts而不是rxjava,但很想听听人们在两者之间的经验。

谢谢!

3个回答

19

我曾在不同的项目中使用过两者,并从Bolts迁移到了RxJava。简单回答你的问题:

哪个框架适合处理需要按顺序完成的任务?

你可以轻松地使用任何一个框架来完成这项任务。它们都能够:

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

然而,这基本上就是Bolts功能的全部,而RxJava则不断提供更多功能。RxJava的真正强大之处在于其操作符,其中包括数据转换、组合和过滤。

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

另外,两个库的方法计数如下:

RxJava - 4605
Bolts  - 479

谢谢!从Bolts转换到RxJava容易吗?我可能会遇到什么问题? - reidisaki
在rx-java中会遇到许多陷阱。它非常强大和表现力强。个人认为“cache”操作符并没有完全按照我的预期工作。而且,编写遵守背压的ObservableOperator是困难的。 - Andrew Gallasch

9
Jahnold提供了很好的概述,我只想添加一些更多的信息:
首先,Bolts和RxJava都是Microsoft异步编程模型的Java实现:Bolts = 任务并行化库,RxJava = 响应式扩展。它们都允许轻松地链接和线程切换(后台<->主线程)。
将Bolts/TPL与RxJava/Rx进行比较的最佳方法是,Bolts用于异步单值(Promise),而RxJava用于异步值列表(Streams)。
因此,Bolts适用于返回单个值的后台工作,例如一般网络请求、从磁盘读取文件等,而RxJava适用于返回多个值的事物,例如订阅GPS坐标、onClick事件等。
因此,为了更好地回答您的问题: “哪种框架适合处理需要按顺序完成的任务?” 我必须再问一个问题:您的工作是否意味着单个结果或多个结果?

有些请求只会返回一个结果,而有些则可能返回多个结果...抱歉,我知道这并不是很有帮助。 - reidisaki
你完全可以同时使用两者! - Grantland Chew
@GrantlandChew 虽然你的回答没有偏向于Bolts,但写一句免责声明会更好。(顺便说一句,非常好的答案。我也有同样的疑惑,会选择Bolts)。 - Alireza Farahani

1
这两个库解决了两个不同的问题。 Bolts Bolts通过透明地将代码推到后台线程来简化异步编程。Bolts还花费了大量精力尝试减少产生嵌套金字塔格式的难看代码嵌套。因此,如果您特别想处理异步(多线程)问题,Bolts是更强大的解决方案之一。Bolts还能有效地缓解回调问题和回调样板文件,可能是仅想缓解回调问题的最佳解决方案。 RxJava RxJava专门设计用于支持反应式编程范例。反应式编程是Java中命令式编程的一种替代方法。您可能选择转向反应式编程范例,原因有很多。如果您想将代码迁移到反应式编程模型,或者您想在全新的项目中使用反应式,请考虑使用RxJava——Java世界中事实上的反应式标准。

响应式编程还可以解决异步编程问题,并通过泛型减少回调样板代码。但它不应该仅用于解决这些问题。例如,Bolts的能力可以解决嵌套金字塔代码结构,使其成为更可行的异步编程解决方案。另一方面,如果您正在使用RxJava通过响应式编程解决异步问题,则没有必要引入Bolts。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接