HttpClient
有连个实现类,DefaultHttpClient和它的兄弟AndroidHttpClient,提供的api较多,在开发时兼容性不太给力。
HttpClient(android6.0移除了HttpClient)所以个人认为,既然android都不建议用了,还是略过吧
HttpURLConnection
是基于HTTP协议的,其底层通过socket通信实现(socket在在这里不详细说明了,自行百度)
api相对的比较简单,Android 2.2版本之前,有严重的bug, (bug是:使用close方法的时候会影响连接池)
所以建议在android 2.3以后使用HttpUrlConnection,2.3之前使用HttpClient。
从Android4.4开始HttpURLConnection的底层实现采用的是okHttp(所以,基于这两种,应该在看一看okhttp吧)
OkHttp
是 Square 公司开源的针对 Java 和 Android 程序,封装的一个高性能 http 请求库,所以它的职责跟 HttpUrlConnection 是一样的,支持 spdy、http 2.0、 websocket ,支持同步、异步,而且 OkHttp 又封装了线程池,封装了数据转换,封装了参数使用、错误处理等,api 使用起来更加方便。可以把它理解成是一个封装之后的类似 HttpUrlConnection 的一个东西,但是你在使用的时候仍然需要自己再做一层封装,这样才能像使用一个框架一样更加顺手。
volley:(框架): 底层: volley在android2.2以下使用httpClient,2.2以上使用HttpURLConnection
能使网络通信更快,更简单,更健壮,扩展性更好一点
Get,Post网络请求及网络图像的高效率异步处理请求
可以对网络请求进行排序优先级管理
支持网络请求的缓存
多级别取消请求
使用Volley可以简化一些网络通信的开发。不适合大数据和流媒体的网络请求。例如上百兆文件、视频下载
Async-http(框架) 底层: 使用httpClient
清晰的网络请求回调
请求使用ThreadPool,限制并发资源使用情况
GET/POST基于参数构建使用(RequestParams)
支持Multipart文件上传,大数据上传下载
内置响应解析成JSON
持久化cookie存储,保存cookie到你的应用程序的SharedPreferences
支持二进制文件(图片等)的下载
想必你肯定知道6.0之后HttpClient不是系统自带的了,不过它在最近的更新中将HttpClient的所有代码copy了一份进来,所以还能使用。
okttp(框架):
OkHttp 是 Square 公司开源的针对 Java 和 Android 程序,封装的一个高性能 http 请求库,所以它的职责跟 HttpUrlConnection 是一样的,支持 spdy、http 2.0、 websocket ,支持同步、异步,而且 OkHttp 又封装了线程池,封装了数据转换,封装了参数使用、错误处理等,api 使用起来更加方便。可以把它理解成是一个封装之后的类似 HttpUrlConnection 的一个东西,但是你在使用的时候仍然需要自己再做一层封装,这样才能像使用一个框架一样更加顺手。
•okhttp是高性能的http库,支持同步、异步,而且实现了spdy、http2、websocket协议,api很简洁易用,和volley一样实现了http协议的缓存。
Retrofit(框架)底层;基于okhttp:
Square公司还出了一个Retrofit库配合OkHttp战斗力翻倍。(强烈推荐)它是基于okhttp的
Retrofit的跟Volley是一个套路,但解耦的更彻底:比方说通过注解来配置请求参数,通过工厂来生成CallAdapter,Converter,你可以使用不同的请求适配器(CallAdapter), 比方说RxJava,Java8, Guava。你可以使用不同的反序列化工具(Converter),比方说json, protobuff, xml, moshi等等。
(新框架)RxJava:
RxJava 是一个响应式编程框架,采用观察者设计模式。所以自然少不了 Observable 和 Subscriber 这两个东东了。
本人有关于Rxjava详细的使用讲解,http://blog.csdn.net/qq_35681180/article/details/53104233
Xutil:
xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
xUtils最低兼容android 2.2 (api level 8)。 当前xUtils主要有四大模块:
DbUtils模块
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
ViewUtils模块
android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
HttpUtils模块
支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
BitmapUtils模块
加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
如果以上网络库你都能熟练掌握,那么优先推荐使用 Retrofit ,前提是最好你们的后台 api 也能遵循 RESTful 的风格,其次如果你不想使用或者没能力掌握 Retrofit ,那么推荐使用 Volley ,毕竟 Volley 你不需要做过多的封装,当然如果你们需要上传大数据,那么不建议使用 Volley,否则你该采用 OkHttp 。
最后,可能有些人会纠结 Volley 与 OkHttp 的选择,那是因为我认为 OkHttp 还是需要一定的能力做一层封装的,如果你有能力封装的话那不如直接用 Retrofit 了,如果没能力封装还是乖乖的用 Volley 吧,如果你能有一些不错的基于 OkHttp 封装好的开源库,总之你要根据自己项目的需求来选择使用自己的框架!