what is the difference between retrofit synchronous and asynchronous request? which one is better and why?

call.execute() runs the request on the current thread.

call.enqueue(callback) runs the request on a background thread, and runs the callback on the current thread.

You generally don't want to run call.execute() on the main thread because it'll crash, but you also don't want to run call.enqueue() on a background thread.


when you asynchronous, it means not in the foreground(it does not block the users interface while it accomplishes the given task), on other hand synchronous means in the foreground while your application execute things in the same thread the UI consuming.

In your case(making REST requests via retrofit or any other REST api) you must not make that in that foreground and you have to make in a background thread.

In the case of retrofit you have the following methods to make the request:

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

So you have a choice of two: either you make the call.enqueue directly or you can user call.execute but wrapped with a service(I mean you have to handle the background work your self).