我遇到过几个人试图说服我使用RxJava而不是Android的标准AsyncTask
构造的例子。RxJava而不是AsyncTask?
在我看来RxJava提供了更多的功能,但在打击AsyncTask
简单丢失。
是否有适合的一种方法比其他或更一般都能RxJava甚至被认为优于任何更好的使用情况?
我遇到过几个人试图说服我使用RxJava而不是Android的标准AsyncTask
构造的例子。RxJava而不是AsyncTask?
在我看来RxJava提供了更多的功能,但在打击AsyncTask
简单丢失。
是否有适合的一种方法比其他或更一般都能RxJava甚至被认为优于任何更好的使用情况?
当您在Java 8上使用RxJava时,可以看到RxJava的全部功能,最好使用像Retrofit这样的库。它可以让您轻松地将操作链接在一起,完全控制错误处理。例如,考虑给定id
以下代码:
apiClient
.getOrder(id)
.subscribeOn(Schedulers.io())
.flatMapIterable(Order::getLineItems)
.flatMap(lineItem ->
apiClient.getProduct(lineItem.getProductId())
.subscribeOn(Schedulers.io())
.map(product -> product.getCurrentPrice() * lineItem.getCount()),
5)
.reduce((a,b)->a+b)
.retryWhen((e, count) -> count<2 && (e instanceof RetrofitError))
.onErrorReturn(e -> -1)
.subscribe(System.out::println);
这将异步计算的顺序的总价格,具有以下属性:用于订单管理微服务一个改造客户端:指定的顺序和apiClient一个int :
此外,海事组织.subscribeOn(Schedulers.io())
后,每个网络电话应该是隐含的 - 你可以通过修改你如何创建改造客户。对于11 + 2行代码来说不错,即使它比Android-ish更后端。
非常感谢这个详细的例子。我期待对这些一流的功能进行修补。在Java中很久没有这样做了。 – qantik
RxBinding/RxAndroid由杰克沃顿商学院提供了您可以使用,使异步调用一些不错的线程功能,但RxJava提供的不仅仅是处理异步线程waaay更多的好处/功能。这就是说,有一个非常陡峭的学习曲线(IMO)。另外,应该注意的是,使用AsyncTasks没有任何问题,您可以使用Rx(也是IMO)编写更多雄辩的解决方案。
TLDR你应该努力使用它。 Retrofit和RxJava可以很好地协同工作,以实现AsyncTask的替换目的。
我看到这篇文章解释了为什么,如果有帮助。 http://blog.feedpresso.com/2016/01/25/why-you-should-use-rxjava-in-android-a-short-introduction-to-rxjava.html – lsiva
谢谢。它看起来有点像Scala处理并发。我会在我的项目中进行一些测试以适应RxJava。但是,你认为AsyncTask的功能有一个基本缺陷吗? – qantik