OKHttp同时支持synchronous and asynchronous api。 如果我想发出一个异步请求时,我可以:使用OKHttp,AsyncTask和OKhttp异步请求中的同步请求有什么区别?
- 使用的AsyncTask,并出具OKhttp同步API。
- 发出OKhttp异步API。
这2个选项有什么区别?哪一个更好?
OKHttp同时支持synchronous and asynchronous api。 如果我想发出一个异步请求时,我可以:使用OKHttp,AsyncTask和OKhttp异步请求中的同步请求有什么区别?
这2个选项有什么区别?哪一个更好?
相当多的不同!
对HTTP请求使用AsyncTask
几乎是您在Android上可以做的最糟糕的事情之一。它充满了无条件避免的问题和疑难杂症。例如,您不能在执行期间取消请求。使用AsyncTask
的模式通常也会泄漏对Android开发的一个主要罪恶Activity
的引用。
OkHttp的异步是有很多原因大大优于:
Callback
的引用将被释放并且不会被调用。另外,如果请求还没有开始,它永远不会被执行。如果您使用HTTP/2或SPDY,我们实际上可以取消中间请求的节省带宽和功耗。Activity
中发出的每个请求都可以使用Activity
实例进行标记。然后在或onStop
中,您可以取消所有使用Activity
实例标记的请求。所以如果可以的话,请使用Call.enqueue
!
没什么。 OKHttp异步是OKHttp API驱动的。所以只要你把所有平台的瓶子捆绑在一起,你应该很好。 AsyncTask是Android做事的方式。
但是,由于蜂窝异步任务按顺序运行任务并且不是并行运行。这意味着尽管AsyncTask的执行方法跨越了一个新的线程,该线程将您的作业从UI线程运行,但发送到一个AsyncTask的所有任务都运行在相同的跨线程中。
因此,对于提交的3个任务,您不会获得3个线程,它们都将在单个跨接线程上按顺序运行。使用OKHttp,您可以使用回调和异步GET和POST实现真正的并行性。
尽管您也可以在AsyncTask方法中执行真正的并行性(检查AsyncTask中的重载执行方法),但默认的Android行为不是这样做的。