Android's HTTP Clients -Android的http客户端连接方式
【前言】开发android的手机客户端,通常都要通过模拟http请求与服务器端通信,android给我们提供了两种方式的http client客户端接口,一种是采用Apache HTTP Client,一种是采用HttpURLConnect,那么到底选择哪种方式好呢?来自google android Dalvik team团队的Tim Bray工程师在android官方blog上的一篇文章告诉了我们答案,下面是我的翻译:
大多数的android app的网络连接都会使用http方式发送和接收数据,android包含了两个http客户端类库:HttpURLConnection 和Apache HTTP Client。两个都支持https,文件流上传和下载,配置超时,ipv6和连接池技术。
Apache HTTP Client
DefaultHttpClient 以及它的兄弟类AndroidHttpClient都是适合于Web浏览器的可扩展的HTTP客户端。他们有大量灵活的api,他们的实现稳定而且很少有bug。但是,其巨大的API数量导致我们很难在不破坏兼容性的条件下来改善它,android团队对于Apache HTTP Client改善工作并不是很积极.
HttpURLConnection
HttpURLConnection是一个通用的,轻量级的http客户端,适合大多数的应用,这个类开始比较粗糙,但是对于我们来说其一些关键的api上提高稳定性是简单的。在Froyo(2.2)以前,HttpURLConnection有一些令人沮丧的bug。特别是在一个可读的InputStream上调用close()方法可能会破坏连接池,可通过不使用连接池技术来避免这种情况。
private void enableHttpResponseCache() { try { long httpCacheSize = 10 * 1024 * 1024; // 10 MiB File httpCacheDir = new File(getCacheDir(), "http"); Class.forName("android.net.http.HttpResponseCache") .getMethod("install", File.class, long.class) .invoke(null, httpCacheDir, httpCacheSize); } catch (Exception httpResponseCacheNotAvailable) { }}当然,你也应该配置你的Web服务器,在其Http响应中设置cache头字段。哪一个更好呢?
Apache HTTP client在Eclair(2.1)和Froyo(2.2)上bug很少,在这些版本上使用是最好的选择。
在Gingerbread(2.3)系统及以后,HttpURLConnection将是最佳选择。其API简单而且小巧,非常适合于Android。透明压缩及响应缓存机制减少了网络流量,提升网络速度,节省电池电量。 新的应用将应该使用HttpURLConnection, 它是我们Android团队致力于前进的方向!
译自:http://android-developers.blogspot.com/2011/09/androids-http-clients.html