一、目的:
对比现在主流网络框架的优势和缺点,在实际项目中如何选择适合自己的框架;
现在基本已经是Okhttp+retrofit结合使用的天下,他们的优势也是很明显的,Google已经在Android4.4之后将HttpUrlConnection已经替换了OkHttp
主流框架分类
底层网络框架:HttpClient、HTTPURLConnection、OkHttp
都属于底层网络框架,是真正发起http请求的;
封装的网络框架:Volley、Retrofit、Okgo、Novate
属于对底层网络框架的封装,比如Volley内部使用的就是HttpURLConnection、HttpClient、OkHttp
,Retrofit是基于OkHttp
的封装
发展史
Android2.2之前HttpClient是最佳选择,Android2.3之后Google官方建议使用HttpURLConnection,Android6.0以后Google官方Api移除HttpClient
简单对比
框架 | okhttp | retrofit | volley | android-async-http |
---|---|---|---|---|
作者 | square公司 | square公司 | ||
性能 | 拥有Nio和Okio,所以性能更高,请求、处理速度更快(io:阻塞式 nio:非阻塞式) | 代码简化,结构彻底,职责细分;易于和rxjava使用,使用方法较多,原理复杂 | 可拓展性好,可支持httpClient、HTTPURLConnection、okhttp | android5.0之后已弃用 |
特点 | ①高性能http请求库,使用连接池来复用连接以提供效率; ②支持SPDY,共享同一个Socket来处理同一个服务器所有的请求; ③支持http2.0、Websocket; ④支持同步、异步执行 ⑤封装线程池、数据转换、参数使用、错误处理等; ⑥无缝支持Gzip来减少数据流量; ⑦缓存响应数据来减少重复的网络请求 ⑧能从很多常用的连接问题中自动恢复 ⑨解决了代理服务器问题和SSL握手失败问题 |
①Resrful api设计风格 ②支持同步、异步 ③通过注解配置请求,包括请求方法、参数、请求头、返回值等 ⑤可以搭配多种Converter将获得数据解析&序列化 ⑥支持Gson(默认)、Jsckson、Protobuf等 ⑦提供Rxjava支持 |
①基于HttpUrlConnection,封装了UIL图片加载框架,支持图片加载 ②网络请求的排序、优先级处理缓存; ③多级别取消请求 ④Activity和生命周期的联动(Activity结束生命周期同时取消所有网络请求) |
①基于HttpClient ②在UI线程外、异步进行http请求 ③在匿名回调中处理请求结果,callback使用了Andorid的Handler发送消息机制在创建它的线程中执行 ④自动智能请求重试机制 ⑤持久化cookie存储,保存cookit到应用程序的SharedPreferences |
- | - | - | - | - |
适用场景 | 重量级网络交互场景:网络请求频繁,传输数据量大
|
- | 适合轻量级网络交互:网络请求频繁,传输数据量小 ;不能进行大数据的网络操作,比如音频文件的下载传输 原因: Volley的Request和Response都是把数据放在byte数组中,不支持输入输出流,把数据放在数组中,如果文件大,数组就会很大,需要消耗很大的内存
|
- |
缺点 | ------ | ------ | 致命缺点:不能下载大数据文件 | 已停止维护 |
常见问题:
问题一:Android6.0以后Google官方Api移除HttpClient,继续使用HttpClient及基于其封装的网络库会出异常
解决:build.gradle 文件中声明以下编译时依赖项:
官方说明:https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html
android {
useLibrary ‘org.apache.http.legacy’
}
网友评论