【问题标题】:what is the difference between retrofit synchronous and asynchronous request? which one is better and why?改造同步和异步请求有什么区别?哪个更好,为什么?
【发布时间】:2018-06-17 11:32:20
【问题描述】:

我真的到处都在搜索这个,我可以同时发出同步和异步数据请求,但我实际上无法理解哪个是异步的?什么是同步的?

【问题讨论】:

    标签: android rest retrofit


    【解决方案1】:

    call.execute() 在当前线程上运行请求。

    call.enqueue(callback) 在后台线程上运行请求,并在当前线程上运行回调。

    您通常不想在主线程上运行call.execute(),因为它会崩溃,但您也不想在后台线程上运行call.enqueue()

    【讨论】:

    • 所以我应该阻止使用同步请求
    • 或者如果我在服务中进行调用,我可以共享服务正在使用的线程。
    • call.execute() 在线程池/执行程序/IntentService 上有意义。
    • 谢谢,这很有帮助,抱歉其他问题:你的意思是在外部线程中执行(例如 IntentService for ex)与在主线程中使用 enqueue 相同吗??
    • 非常感谢您对我的帮助很大,在我现在正在学习的课程中,讲师使用了与意图服务同步(我认为正常情况下在所有情况下都使用意图服务)但是当他来到异步部分时,他在主要活动中做到了(琳达课程,所以我不能在那里问对不起)你真的帮助了我
    【解决方案2】:

    当你异步时,它意味着不在前台(它在完成给定任务时不会阻塞用户界面),另一方面同步意味着在前台,而你的应用程序在同一个线程中执行 UI 消耗。

    在您的情况下(通过改造或任何其他 REST api 发出 REST 请求),您不得在该前台发出请求,而必须在后台线程中发出。

    在改造的情况下,您可以通过以下方法提出请求:

    call.execute() // works in the foreground.
    call.enqueue() // works in the background.
    

    所以你有两个选择:要么直接调用 call.enqueue,要么你可以使用 call.execute 但用服务包装(我的意思是你必须自己处理后台工作)。

    【讨论】:

    【解决方案3】:

    通过定义返回类型来声明同步请求。同步方法在主线程上执行。这意味着在请求执行期间 UI 会阻塞,并且在此期间无法进行交互。在调用对象上使用 .execute() 方法将执行同步请求。反序列化的响应正文可通过响应对象上的 .body() 方法获得。

    异步请求没有返回类型。相反,定义的方法需要一个类型化的回调作为最后一个方法参数。使用异步请求强制您使用它的两个回调方法实现回调:成功和失败。从服务类调用异步 getTasks() 方法时,您必须实现新的 Callback 并定义请求完成后应执行的操作。

    【讨论】:

    • 这如何解释enqueue
    【解决方案4】:

    Retrofit 是适用于 Android 和 Java 的类型安全 HTTP 客户端。我强烈建议在任何其他库上使用它。

    你了解什么是syncasync调用,或者什么是blockingnon-blocking调用?

    要回答您的问题,您在 Android 上执行的任何 api 调用或任何繁重或耗时的任务都应该是非阻塞(异步),因为它不应阻塞 Android 中的主线程或 UI 线程。

    请阅读本文了解更多

    https://developer.android.com/guide/components/processes-and-threads.html

    【讨论】:

    • 这个很有帮助,我去看看有没有不懂的地方
    • 我知道什么是同步,什么是异步,但是在从 Web 服务请求数据的情况下,获取此数据的内容是同步的(当谈到同步时)以及什么是异步(当谈到异步数据时要求)
    • @EpicPandaForce 解释得很好。你的问题不清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    相关资源
    最近更新 更多