改造同步和异步请求有什么区别?哪一个更好,为什么



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

call.execute()当前

线程上运行请求。

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

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

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

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

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

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

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

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

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

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

您是否了解什么是同步异步调用,或者什么是阻塞和非阻塞调用

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

请阅读本文以了解更多理解

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

相关内容

最新更新