OKHttp支持synchronous and asynchronous api。 如果我想发出异步请求,我可以:
这两个选项有什么区别?哪一个更好?
答案 0 :(得分:60)
相差很多!
将AsyncTask
用于HTTP请求几乎是您在Android上可以做的最糟糕的事情之一。它充满了无条件避免的问题和陷阱。例如,您无法在执行期间取消请求。使用AsyncTask
的模式通常也会泄漏对Activity
的引用,这是Android开发的主要罪行。
OkHttp的async非常优越,原因很多:
Callback
的引用将被释放,永远不会被调用。此外,如果请求尚未启动,则永远不会执行。如果您使用的是HTTP / 2或SPDY,我们实际上可以取消中间请求,节省带宽和电量。Activity
中发出的每个请求都可以使用Activity
实例进行标记。然后在onPause
或onStop
中,您可以取消所有使用Activity
实例标记的请求。Call
机制,则这比阻止版本更有效。如果可以,请使用Call.enqueue
!
答案 1 :(得分:1)
没什么。 OKHttp async是OKHttp API驱动的。因此,只要您将罐子捆绑在一起用于所有平台,您应该是好的。 AsyncTask是Android的做事方式。
但是,由于Honeycomb Async任务按顺序而不是并行运行任务。这意味着尽管AsyncTask的execute方法跨越了一个新的线程,该线程使您的作业远离UI线程,但发送到一个AsyncTask的所有任务都在同一个跨区线程中运行。
因此,对于提交的3个任务,您不会获得3个线程,它们都会在单个跨区线程上顺序运行。使用OKHttp,您可以使用回调和异步GET和POST实现真正的并行性。
虽然您也可以在AsyncTask方法中实现真正的并行性(检查AsyncTask中重载的执行方法)但默认的Android行为不是这样做的。