用RxJava代替AsyncTask吗?

当人们试图说服我使用RxJava而不是Android的标准AsyncTask构造时,我遇到了几个实例。

我认为RxJava提供了更多的功能,但相对而言却失去了简单性AsyncTask

有没有比第一种方法更适合一种方法的用例,或者甚至可以认为RxJava更通用?

回答:

当您在Java

8上使用RxJava的全部功能时,可以看到RxJava的全部功能,最好使用诸如Retrofit之类的库。它允许您将操作琐碎地链接在一起,并完全控制错误处理。例如,考虑以下给出的代码id:一个用于指定订单的int和apiClient:用于订单管理微服务的Retrofit客户端:

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);

这将异步计算具有以下属性的订单总价:

  • 一次最多可以有5个针对该API的运行中的请求(并且您可以调整IO调度程序,使其对所有请求具有硬性限制,而不仅仅是针对单个可观察链)
  • 如果发生网络错误,最多2次重试
  • 失败时为-1(反模式TBH,但这是另一种讨论)

另外,IMO .subscribeOn(Schedulers.io())应该在每个网络调用之后都是隐式的-

您可以通过修改创建Retrofit客户端的方式来实现。对于11 + 2行代码来说,这还不错,即使它比Android后端的后端风格还多。

以上是 用RxJava代替AsyncTask吗? 的全部内容, 来源链接: utcz.com/qa/423794.html

回到顶部