为啥我应该使用 OkHttp 而不是 android httpClient 和 AsyncTask

Posted

技术标签:

【中文标题】为啥我应该使用 OkHttp 而不是 android httpClient 和 AsyncTask【英文标题】:Why should I use OkHttp instead of android httpClient and AsyncTask为什么我应该使用 OkHttp 而不是 android httpClient 和 AsyncTask 【发布时间】:2014-11-02 13:54:30 【问题描述】:

Paresh Mayani 在 SpeakerDeck (https://speakerdeck.com/pareshmayani/lazy-android-developers-be-productive) 的演讲中说,最好使用 OkHttpRetrofit 而不是 AsyncTaskDefaultHttpClient

我的问题是为什么? 为什么它们更快? 这些不也是基于默认 android 类的库吗? OkHttp 和 Retrofit 有什么区别?

【问题讨论】:

【参考方案1】:

与往常一样,工程设计是权衡取舍,以构建满足您需求的最佳解决方案。

使用库而不是平台就是一个很好的例子。该平台的 API 已经存在了很长一段时间,出于兼容性原因,Android 团队在更改这些接口方面的灵活性较低。图书馆没有这些限制。例如,如果主机支持,OkHttp 可以使用 SPDY 协议来降低延迟、压缩、多路复用等,这可以使您的 Android 应用程序响应更快。

Square 的项目 OkHttp 和 Retrofit 可以一起工作。它们也是常规的 Java 库,因此它们不依赖于/基于 Android。 OkHttp 处理较低级别的 HTTP 连接细节,而 Retrofit 简化了 REST API 的使用。 Retrofit 可以在 OkHttp 之上使用,但不是必须的。

查看项目网站,它们也托管在 github 上。

http://square.github.io/okhttp/

http://square.github.io/retrofit/

【讨论】:

以上是关于为啥我应该使用 OkHttp 而不是 android httpClient 和 AsyncTask的主要内容,如果未能解决你的问题,请参考以下文章

为啥我应该使用 LoadBalancerProbe 而不是订阅 RoleEnvironment.StatusCheck 事件?

为啥我应该使用 CString 的 GetBuffer 成员而不是 SetAt?

Android:何时/为啥我应该使用 FrameLayout 而不是 Fragment?

为啥我应该使用 char 而不是 varchar? [复制]

为啥我应该在 AngularJS 中选择使用服务而不是工厂? [复制]

为啥我们应该在 Angular 中使用 subscribe() 而不是 map()?