Android 中 HttpUrlConnection、OkHttp和Volley 等网络连接方式的对比
虽然这三个都是可以用来访问网络的,但是还是不同的。每一个使用的时候都有自己的优势和缺点,在项目中使用的时候可根据实际情况来选择。
一、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停止了更新