开源框架android 开发程序员开源项目源码解析

Android 网络框架发展史及对比

2017-09-04  本文已影响133人  嘎啦果安卓兽

主要分析以下几个框架

  1. HttpClient
  2. HttpURLConnection
  3. Volley
  4. OkHttp
  5. Retrofit

网络框架分类

底层网络框架

HttpClient, HttpURLConnection,OkHttp 属于底层的网络框架,这些框架是底层真正发起http请求的。

封装的网络框架

Volley, retrofit属于对底层网络框架的封装,比如Volley内部使用的就是HttpURLConnection和HttpClient, retrofit是基于OkHttp 的封装

大而全的框架

Afinal和xUtils等大而全的框架,包括网络框架,数据库,图片加载等,不建议使用这类的框架,不好维护,并且这种框架在每个模块都做的不精。

HttpClient

介绍

HttpClient是Apache公司提供的原始的http协议库,在2.2之前,官方推荐使用HttpClient.

官方博客:
Android’s HTTP Clients
https://android-developers.googleblog.com/2011/09/androids-http-clients.html
(后面牵涉到HttpClient和HttpURLConnection的一部分分析的内容来自这篇文章)

优点

功能丰富,非常稳定,bug极少

官方博客截图.png
缺点

数量众多的API使得在保证兼容的情况下很难改进,这也是Google官方放弃HttpClient的主要原因

官方博客截图.png
发展

2.2之前HttpClient是最佳选择,2.3之后, Google官方建议使用HttpURLConnection. Android6.0以后Google官方Api移除HttpClient

httpclient Android6.0问题及解决

问题:Android6.0以后Google官方Api移除HttpClient,继续使用HttpClient及基于其封装的网络库会出异常
解决:在 build.gradle 文件中声明以下编译时依赖项:
android {
useLibrary ‘org.apache.http.legacy’
}

参考:官方介绍
Android 6.0 变更
https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client

HttpURLConnection

介绍

HttpURLConnection是Sun公司提供的原始的http协议库,也是Java的标准类库java.net中的一员

优点

HttpURLConnection 是通用的轻量级的 HTTP 客户端工具,适用于大部分应用程序。
增加了压缩(2.3)和缓存(4.0),减少了网络使用,提高了速度,节省了电量
因为API较少,所以可以在保证兼容性的前提下做改进,这也是官方选择HttpURLConnection取代HttpClient的主要原因

官方博客截图.png
2.2之前存在的问题及解决

在 Android 2.2 之前的版本中,存在一些 bug;尤其是在可读的输入流中调用 close(),会污染连接池
解决:关闭连接池以保证正常使用

官方博客截图.png

HttpClient 与HttpURLConnection, Which client is best?

官方博客截图.png

总结:2.2之前HttpClient是最佳选择,2.3之后,建议使用HttpURLConnection

Volley

介绍

2013年Google I/O大会上推出的网络框架
Volley is an HTTP library that makes networking for Android apps easier and most importantly, faster. (不仅容易,而且更重要的是,更快)

https://developer.android.com/training/volley/index.html

优点

(来自官方介绍)

适合

数据量不大,但通信频繁的网络操作,应用中一般的网络请求都属于这种

不适合

Volley is not suitable for large download or streaming operations, since Volley holds all responses in memory during parsing.
不适合大的下载或者流式传输操作,因为Volley在解析过程中将所有响应都存储在内存中。

Volley集成HttpClient和HttpURLConnection

在Android 2.3及以上的版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient
HurlStack和HttpClientStack分别对应HttpURLConnection 和HttpClient 。其实这两个对象都是实现了HttpStack接口的

Volley集成OkHttp

同上,我们可以实现一个集成了OkHttp的HurlStack的实现
OkHttp作者Jake Wharton的Gist:
https://gist.github.com/JakeWharton/5616899

okhttp

介绍

okhttp是square公司开发的网络框架。
(后面会有文章详细分析)

google官方使用

Android 4.4后,HttpURLConnection底层实现使用的就是OkHttp

优点

(来自官方介绍)

Retrofit

介绍

Retrofit与okhttp一样出自于Square公司。Retrofit是一个封装的网络框架,底层网络框架使用的是OkHttp(Retrofit 2.0 开始不支持其他底层网络框架)。
(后面会有文章详细分析)

优点

Retrofit是对http请求的更好的封装,使用起来更简单,大大增加了开发效率。
其中的很多环节你都可以自定义,使用起来更灵活,比如你可以自定义json解析框架比如Gson,Jackson等。
支持RxJava,这也是很多人选择它的原因。

RxJava+Retrofit+OkHttp

这基本上是目前网络框架最好的选择了。

上一篇下一篇

猜你喜欢

热点阅读