一、概述
基础框架有HttpClient、HttpURLConnection、Okhttp3个
1. HttpClient是Apache 的一个三方网络框架,网络请求做了完善的封装 ,api众多,用起来比较方便,开发快。 android5.0被废弃,6.0删除。(被okHttp取代)
2. HttpURLConnection 一个多用途、轻量级的Http客户端。 HttpUrlConnection是JDK里提供的联网API,我们知道Android SDK是基于Java的,所以当然优先考虑HttpUrlConnection这种最原始最基本的API,其实大多数开源的联网框架基本上也是基于JDK的HttpUrlConnection进行的封装罢了
3. OkHttp 是专注于提升网络连接效率的http客户端(支持2.3+系统版本和jdk1.7+版本)。
优点:
1.缓存连接 -> 实现同一ip和端口的请求重用一个socket,从而大大降低网络连接的时间 ,响应避免重复的网络请求
2.缓存内容 -> 1.检测新鲜度 2.服务再验证
3.使用GZIP压缩减少传输的数据量
缺点:
请求网络切换是在线程里面的,不在主线程不能刷新UI,需手动处理。
在上面3个基础框架上延伸了一些优秀的通信框架。
例如:国外Google的Volley、androidAsyncHttp、Square的Retrofit。
国内的XUtils和Afinal等等
参考:https://www.jianshu.com/p/13b96d3f29c3
二、Volley
中文翻译为“齐射、并发”,是在 2013 年的 Google 大会上发布的一款 Android 平台网络通信库,具有网络请求的处理、小图片的异步加载和缓存等功能,能够帮助 Android APP 更方便地执行网络操作,而且更快速高效。
优点:
(1)自动调度网络请求;
(2)高并发网络连接;
(3)通过标准的 HTTP cache coherence(高速缓存一致性)缓存磁盘和内存透明的响应;
(4)支持指定请求的优先级( 请求队列的优先级排序);
(5) 提供多样的取消机制:网络请求 cancel 机制,我们可以取消单个请求,或者指定取消请求队列中的一个区域;
(6)框架容易被定制,例如,定制重试或者回退功能;
(7)包含了调试与追踪工具;
(8)默认 Android2.3 及以上基于 HttpURLConnection,2.3 以下使用基于 HttpClient
(9)提供简便的图片加载工具(其实图片的加载才是我们最为看重的功能)
缺点:
(1)不能下载文件:这也是它最致命的地方,官网或相关地址:
Volley 的 github 地址:https://github.com/mcxiaoke/android-volley;
Google I/O 2013 – Volley: Easy, Fast Networking for Android:https://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded
简单的使用:http://www.dengzhr.com/others/mobile/android/762
三、Android-async-http
Android-async-http 是一个强大的网络请求库,这个网络请求库是基于 Apache HttpClient 库之上的一个异步网络请求处理库,网络处理均基于 Android 的非 UI 线程,通过回调方法处理请求结果。
android-async-http 是一个强大的第三方开源网络请求库。可惜的是 Android 6.0 (api 23) SDK,不再提供 org.apache.http.* (只保留几个类)。
优点:
(1) 在匿名回调中处理请求结果
(2) 在 UI 线程外进行 http 请求
(3) 文件断点上传
(4) 智能重试
(5) 默认 gzip 压缩
(6) 支持解析成 Json 格式
(7) 可将 Cookies 持久化到 SharedPreference
官网或相关地址:
Android-async-http 的 github 地址:https://github.com/loopj/android-async-http
官网教程:http://loopj.com/android-async-http/
四、retrofit
其实 retrofit 是根据OKHttp封装的框架,它的底层网络请求就是使用OKHttp的,这个框架的作者也是非常有名的,就是 Jake Wharton 。
优点:
(1)支持 okhttp
(2)注解处理,简化代码
(3)支持上传和下载文件
(4)支持自己更换解析方式
(5)支持多种http请求库
官网或相关地址:
OKHttp 的 github 地址:https://github.com/square/retrofit