转-Android联网 — HttpURLConnection和HttpClient选择哪个好?
http://www.ituring.com.cn/article/199619?utm_source=tuicool
在Android开发中,访问网络我们是选择HttpURLConnection还是HttpClient好呢?这两种网络协议又有什么区别呢?下面我们就一起来look look。
1、HttpClient
HttpClient拥有DefaultHttpClient和AndroidHttpClient两个具体的实现类,它们都有众多的API,而且实现比较稳定,bug数量也很少。
但也正是因为HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前Android开发团队在提升和优化HttpClient方面的工作态度并不积极。
2、HttpURLConnection
HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。虽然HttpURLConnection的API提供的比较简单,但是同时这也使得我们可以更加容易地去使用和扩展它。
不过在Android 2.2版本之前,HttpURLConnection一直存在着一些令人厌烦的bug。比如说对一个可读的InputStream调用close()方法时,就有可能会导致连接池失效了。那么我们通常的解决办法就是直接禁用掉连接池的功能:
代码:
private void disableConnectionReuseIfNecessary() {
// 这是一个2.2版本之前的bug
if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {
System.setProperty("http.keepAlive", "false");
}
}
3、到底哪一种才是最好的?
不同版本,最佳选择肯定有所不同,在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择。
而在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。对于新的应用程序应该更加偏向于使用HttpURLConnection,因为在以后的工作当中我们也会将更多的时间放在优化HttpURLConnection上面。
因此大家在开发Android应用的时候,要看自己是开发给什么Android版本的用户使用的,如果目标客户是Android 2.2版本及以下,则选用HttpClient,如果目标客户是Android 2.3版本及以上,则选择HttpURLConnection。但是现在软件更新换代这么快,相信绝大部分的Android应用目标客户群都是Android 2.3版本及以上,所以当下来说,HttpURLConnection应该是更受亲睐的选择。
相关文章
- [Android Pro] 利用tcpdump和wireshark对android网络请求进行分析
- [Android Pro] Android学习——在线查看android源代码的3种方式
- [Android Pro] android 混淆文件project.properties和proguard-project.txt
- Android问题-DelphiXE8新建AVD出现“no system images installed for this target”
- Android API之android.content.AsyncQueryHandler
- 《android开发艺术探索》读书笔记(十一)--Android的线程和线程池
- uni-app:ios/android中的nvue和vue页面加载自定义字体(hbuilderx 3.7.3)
- Android版OpenCV图像处理技术亲自验证[四]之直方图的咆哮
- Android开发学习笔记(九)主题与样式
- Atitit.android webview h5运行环境总结
- 理解Android系统中强指针的实现
- android开发分享Android中外接键盘的检测的实现
- android Recovery流程整理
- 【报错】Error inserting GREEM=30 YELLOW=4 RED=5 android.database.sqlite.SQLiteException: no such tab
- Android【报错】. lang。android.app ClassCastException。SharedPreferencesImpl不能被强制转换为android.content.Shared
- Android 9.0 系统settings app详情页控制开启关闭流量数据的开关
- Android 9.0 Recent列表不显示某个app
- Android kotlin实现悬浮窗拖动,LayoutParams参数不能为负数的解决方案
- Android 面试算法题 两个栈实现队列和进制间实现转换
- 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ⑤ ( 优化 Gradle 构建脚本 | 构建脚本结构 | 闭包定义及用法 | 依赖配置 | android 块配置 )
- Android 反编译(一,apktool+smail2java)
- Android Studio下“Error:Could not find com.android.tools.build:gradle:2.2.1”的解决方法
- Android抽屉(SlidingDrawer --类似android通知栏下拉效果)
- Android开发 从底部弹出动画(选择菜单)
- Android EditText(失焦+焦点)+登录界面