Android平台有三种网络接口可以使用,他们分别是:java.net(标准Java接口)、Org.apache接口和Android.net(Android网络接口)。
1.java.net
JDK提供的与联网有关的类,包括流、数据包套接字(socket)、Internet协议、常见Http处理等。比如:创建URL,以及URLConnection/HttpURLConnection对象、设置链接参数、链接到服务器、向服务器写数据、从服务器读取数据等通信。
2.Apache接口
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包。但是在Android API 22中取消了HttpClient的相关类,如果要使用,需要单独导入apache HttpClient
3.Android.net
常常使用此包下的类进行Android特有的网络编程,如:访问WiFi,访问Android联网信息,邮件等功能。
关于HttpClient 和HttpURLConnection
大多数的Android应用程序都会使用HTTP协议来发送和接收网络数据,而Android中主要提供了两种方式来进行HTTP操作,HttpURLConnection和HttpClient。这两种方式都支持HTTPS协议、以流的形式进行上传和下载、配置超时时间、IPv6、以及连接池等功能。点进阿帕奇官网在apache HttpClient part for Android Background,上面Background介绍,在谷歌 Android1.0版本的时候,把apache 4.0版本整合进去了。当时4.0也算是一个比较成熟的项目了,Apache官方开始认为Android随着升级会把HttpClient也会升级整合。可是谷歌却没有这么做。所以慢慢的Android就停止维护开发Android里面的HttpClient,而Apache官方的也慢慢的随着维护升级也变成了一个分支。最后Android不维护Android自带的HttpClient并同时拒绝升级apache官方的HttpClient,理由是不兼容。所以Apache 官方就推出了针对Android的HttpClicent。现在是兼容Android里的旧版本API,防止有冲突。以前可能我们用的时候导入,会发生冲突,到 apache HttpClient 4.3,已经开始兼容Android里的。以前使用3.X 的commons的版本的用户,apache也强烈建议升级为最新的。
所以,Android API 22中提到的废弃Android HttpClient 我觉得一部分原因也可能是因为这个。Android废弃HttpClient与apache官方提供的HttpClient没有任何关系。我们照样可以继续使用第三方的HttpClient(apache)
HttpClient
DefaultHttpClient和它的兄弟AndroidHttpClient都是HttpClient具体的实现类,它们都拥有众多的API,而且实现比较稳定,bug数量也很少。
但同时也由于HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前Android团队在提升和优化HttpClient方面的工作态度并不积极。
HttpURLConnection
HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。虽然HttpURLConnection的API提供的比较简单,但是同时这也使得我们可以更加容易地去使用和扩展它。
哪一种才是最好的?
在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择。
而在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。对于新的应用程序应该更加偏向于使用HttpURLConnection。