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

Arm*_*ght 3 rest android retrofit

我真的在每个地方搜索过这个,我可以做同步和异步数据请求,但我实际上无法理解哪个是异步的?什么与什么同步?

Epi*_*rce 16

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

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

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

  • `call.execute()`在threadpool/executor/IntentService上有意义. (3认同)

Arm*_*ght 8

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

在您的情况下(通过改造或任何其他REST api发出REST请求),您不能在该前景中进行,并且您必须在后台线程中进行.

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

call.execute() // works in the foreground.
call.enqueue() // works in the background.
Run Code Online (Sandbox Code Playgroud)

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

  • `execute` 是同步的。它与 UI 线程无关:https://square.github.io/retrofit/2.x/retrofit/retrofit2/Call.html (4认同)
  • execute()在调用/调用的线程上工作。 (2认同)