使用OKHttp,AsyncTask中的同步请求和OKhttp异步请求之间有什么区别?

Neo*_*ang 29 android network-programming android-asynctask okhttp

OKHttp支持同步和异步api.如果我想发出异步请求,我可以:

  1. 使用AsyncTask,并发出OKhttp同步api.
  2. 发出OKhttp异步api.

这两个选项有什么区别?哪一个更好?

Jak*_*ton 61

相当多的不同!

使用AsyncTaskHTTP请求几乎是您在Android上可以做的最糟糕的事情之一.它充满了无条件避免的问题和陷阱.例如,您无法在执行期间取消请求.使用模式AsyncTask也常常泄露Activity对Android开发的主要罪恶的引用.

由于许多原因,OkHttp的异步非常优越:

  • 它支持本机取消.如果请求在飞行中,则对该引用的Callback释放将被释放,并且永远不会被调用.此外,如果请求尚未启动,则永远不会执行.如果您使用的是HTTP/2或SPDY,我们实际上可以取消请求中的节省带宽和功率.
  • 它支持标记多个请求,并通过单个方法调用取消所有请求.这意味着您所做的每个请求Activity都可以使用Activity实例进行标记.然后在onPause或者onStop你可以取消所有用Activity实例标记的请求.
  • 如果您正在使用HTTP/2或SPDY请求,并且响应通过单个连接多路复用到远程服务器,并且通过使用异步Call机制,这比阻止版本更有效.

所以,如果可以,请使用Call.enqueue!