学而实习之 不亦乐乎

Android 中 HttpUrlConnection、OkHttp和Volley 等网络连接方式的对比

2022-08-10 09:30:14

虽然这三个都是可以用来访问网络的,但是还是不同的。每一个使用的时候都有自己的优势和缺点,在项目中使用的时候可根据实际情况来选择。

一、HttpUrlConnection

HttpUrlConnection,这是google官方提供的用来访问网络,但是HttpUrlConnection实现的比较简单,只支持1.0/1.1,是一个多用途、轻量级的http客户端。它对网络请求的封装没有HttpClient彻底,api比较简单,用起来没有那么方便。如果碰到 App 大量网络请求的时候,性能比较差。HttpUrlConnection 底层也是用 Socket 来实现的。

二、OkHttp

OkHttp 和 HttpURLConnection一样, 是面向java的, 而且是做 socket 层的事情的, 使用时要在子线程中调用, 通过handler发送结果到主线程。OkHttp是一个专注于连接效率的 HTTP 客户端。OkHttp 提供了对 HTTP/2、SPDY 和 websocket 协议的支持,并提供了连接池、GZIP 压缩和 HTTP 响应缓存功能。

优点:

  • 支持http请求,https请求。
  • 支持文件下载。
  • 使用的是HttpURLConnection,不要担心android版本的变换。(至少目前是都支持的)。
  • 支持get,post请求。
  • 基于Http的文件上传。
  • 加载图片。

缺点:

  • 比如 callback 回来是在线程里面, 不能刷新 UI,需要我们手动处理。
  • 封装比较麻烦。

三、Volley

Volley 不是做 socket 层的东西. 直接在主线程就可以调用, 拿到结果后直接更新UI, 不需要用 handler 去发送, 很简单。特别适合数据量小,通信频繁的网络操作。

volley 重点在于 request 的队列的管理,其他的方面并不强,但你可以通过接口的方式完善。

优点:

  • 非常适合进行数据量不大,但通信频繁的网络操作。
  • 内部分装了异步线程。
  • 支持get,post网络请求。
  • 图片下载。
  • 可直接在主线程调用服务端并处理返回结果。
  • 可以取消请求,容易扩展,面向接口编程。

缺点:

  • 对大文件下载 Volley 的表现非常糟糕。
  • 只支持http请求。
  • 在 BasicNetwork 中判断了 statusCode(statusCode < 200 || statusCode > 299),如果合条件直
  • 图片加载性能一般。
  • 使用的是httpclient,HttpURLConnection。不过在android 6.0不支持httpclient了,如果想支持得添加org.apache.http.legacy.jar。
  • Volley停止了更新