我正在使用 Retrofit 2 库作为安卓REST客户端。Retrofit支持同步和异步请求(参见这里)。异步请求的原因是不阻塞线程,从而避免被安卓中断。
在实践中,使用本地AsyncTask
中的同步调用还是直接从Retrofit进行异步调用更好呢?
如果有一种方法比另一种更好,那么技术上的原因是什么?
我正在使用 Retrofit 2 库作为安卓REST客户端。Retrofit支持同步和异步请求(参见这里)。异步请求的原因是不阻塞线程,从而避免被安卓中断。
在实践中,使用本地AsyncTask
中的同步调用还是直接从Retrofit进行异步调用更好呢?
如果有一种方法比另一种更好,那么技术上的原因是什么?
使用任何流行的REST客户端(如retrofit,volley等)的主要原因之一是它们减少了在应用程序层管理的细节。其中一个细节是确保您的网络请求发生在主线程之外。如果一个库已经为其他功能提供了相同的功能,为什么还要使用AsyncTask
呢?我能想到的唯一原因是 —— 您认为库的线程处理不够好。这个问题不适用于retrofit 2,它使用OkHttp
来分派异步调用。OkHttp已经存在一段时间并被广泛使用,它管理自己的线程池来执行异步请求,并且非常可靠。
因此,使用retrofit async的好处是代码更加简洁,而没有我所知道的与AsyncTask
和retrofit sync调用相比的缺点。我只有当我的代码已经在另一个原因中执行在后台线程时,才使用同步调用。我从不单独创建线程或异步任务来进行网络调用,而是使用enqueue
。