当前位置: 首页 > 面试题库 >

用RxJava代替AsyncTask吗?

龙昊焱
2023-03-14
问题内容

当人们试图说服我使用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后端的后端风格还多。



 类似资料:
  • 我知道这个问题已经被问过很多次了。但是有些事情我从来没有找到答案。所以希望有人能给我一些启发。 我们都知道,AsyncTask和Thread是执行后台任务以避免ANR问题的选项。建议asynctask只能用于短期运行的任务,而线程可以用于长期运行的任务。asynctask不应用于长任务的原因是众所周知的,这与asynctask可能导致的泄漏有关,因为它可能在活动销毁后继续运行。这很有说服力。然而,

  • 使用RxJava.Observable取代AsyncTask和AsyncTaskLoader > 原文链接 : Replace AsyncTask and AsyncTaskLoader with rx.Observable – RxJava Android Patterns 译者 : ZhaoKaiQiang 校对者: chaossss 状态 : 校对完成 在网上有很多关于RxJava入门指南的

  • RxJava中是否有与RxAndroid中的AndroidSchedulers.mainThread()同义的Scheduler api。因此,如果我在一个新线程上安排一个任务,并且我想在Java主线程上观察它,我将如何做到这一点? 下面的edit是一个RxSubscription示例,带有system。在注释中,主线程被终止,而可观察线程被终止。interval在单独的线程上运行。在Androi

  • 本文向大家介绍Android AsyncTask用法巧用实例代码,包括了Android AsyncTask用法巧用实例代码的使用技巧和注意事项,需要的朋友参考一下 Android AsyncTask 联系人导入 联系人删除 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 我对RxJava/RxAndroid还不熟悉,但我一直坚持使用我的用例。 我尝试迭代一个