栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用RxJava代替AsyncTask吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用RxJava代替AsyncTask吗?

当您在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后端的后端风格还多。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/483279.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号