okhttp,retrofit,android-async-http,volley okhttp应该选择哪一个

Volley(7)
Retrofit(27)
OkHttp(18)
网络请求在 Android开发项目中很常见,为了降低开发周期和难度,我们经常会选用网络请求的开源库。
而现在网络请求的开源库越来越多,我们应该选用哪种呢?
今天我就给大家分别介绍 & 对比现今主流的网络请求库。
网络请求开源库-目录
1. 为什么要用网络请求开源库?
网络请求开源库是一个将网络请求的相关功能封装好的类库,并对外提供Api:
没有网络请求框架之前
App想与服务器进行网络请求交互是一件很痛苦的事:因为Android的主线程不能进行网络请求,还需要另外开一个线程进行请求,然后又要考虑到线程池,缓存等一堆问题。
使用网络请求库后(前人的轮子)
实现网络请求的需求同时不需要考虑:
降低开发难度
缩短开发周期
2. 使用前知识了解
2.1 Android实现网络请求的主流方法(SDK自带)
HttpClient
HttpURLConnection
2.1.1 二者介绍&对比
HttpURLConnection
在Android2.2之前:HttpURLConnection 有个重大 Bug:调用 close() 函数会影响连接池,导致连接复用失效;
所以Android2.2之前不建议使用HttpURLConnection
在Android2.2之后:HttpURLConnection默认开启了 gzip 压缩&提高了HTTPS 的性能
HttpClient
优点:相比于HttpURLConnection,更加高效简洁
缺点:结构过于复杂;维护成本高
在5.0版本后被Android官方弃用
2.2 网络请求库和Android网络请求实现方法的关系
网络请求框架本质上是一个将网络请求的相关方法( HttpClient或HttpURLConnection)封装好的类库,并实现另开线程进行请求和处理数据,从而实现整个网络请求模块的功能。具体的关系可看下图:
网络请求框架与网络请求功能的关系
3. 主流的网络请求库-介绍
如今Android中主流的网络请求框架有:
Android-Async-Http
下面是简单介绍:
网络请求加载 - 介绍
4. 网络请求库- 对比
一图让你了解全部的网络请求库和他们之间的区别!
网络请求库 - 对比
5. 各个主流网络请求库的Github地址
本文对Android的主流网络请求库进行了全面的介绍 & 对比,总的来说,网络请求库没有说哪个最好,只有最合适,只有真的了解其使用场景才能很好的选择网络请求库。
7. 下篇预告
接下来我会逐个介绍其使用方法 & 源码分析:
有兴趣可以继续关注!!!!
请点赞!因为你的鼓励是我写作的最大动力!
相关文章阅读
欢迎关注的简书!
不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度。
访问:116224次
积分:3917
排名:第9566名
转载:796篇
评论:80条
(73)(231)(122)(37)(64)(34)(81)(157)(1)1,334被浏览85,722分享邀请回答13 条评论分享收藏感谢收起1,334被浏览85,722分享邀请回答6730 条评论分享收藏感谢收起OkHttp, Retrofit, Volley应该选择哪一个? - 简书
OkHttp, Retrofit, Volley应该选择哪一个?
今天在知乎看到一个问题,忍不住去回答了。
也在这里写一份:
我们来先说一个常识性的错误:
volley, retrofit, android-async-http 帮你封装了具体的请求,线程切换以及数据转换。
而OkHttp 是基于http协议封装的一套请求客户端,虽然它也可以开线程,但根本上它更偏向真正的请求,跟HttpClient, HttpUrlConnection的职责是一样的。
所以不要混淆。
-----以下纯个人主观见解
首先,我想即使你单纯使用OkHttp,还是会再包一层的,这样就等价于Volley之流的框架,只是封装的好与坏而已。
android-async-http内部实现是基于HttpClient, 想必你肯定知道6.0之后HttpClient是不是系统自带的了,不过它在最近的更新中将HttpClient的所有代码copy了一份进来,所以还能使用。
Volley是官方出的,volley在设计的时候是将具体的请求客户端做了下封装:HurlStack,也就是说可以支持HttpUrlConnection, HttpClient, OkHttp,相当于模版模式吧,这样解耦还是非常方便的,可以随意切换,如果你之前使用过Volley,并习惯使用,那直接写个OkHttp扩展就行了。
Retrofit因为也是square出的,所以大家可能对它更崇拜些。Retrofit的跟Volley是一个套路,但解耦的更彻底:比方说通过注解来配置请求参数,通过工厂来生成CallAdapter,Converter,你可以使用不同的请求适配器(CallAdapter), 比方说RxJava,Java8, Guava。你可以使用不同的反序列化工具(Converter),比方说json, protobuff, xml, moshi等等。
超级解耦,里面涉及到超多设计模式,个人觉得是很经典的学习案例。虽然支持Java8, Guava你可能也不需要用到。xml,protobuff等数据格式你也可能不需要解析。but,万一遇到鬼了呢。
至于性能上,个人觉得这完全取决于请求client,也就是okhttp的性能,跟这些封装工具没太大关系。
至于RxJava,最好充分理解其原理之后再使用,别人云亦云,特别team人数多的情况下,总得有个完全精通的吧,万一掉坑里了呢。。。
就说这么多啦,选最适合项目的,选大多数人选择的,选简单易用的,就这么个标准。
关于Retrofit源码分析可以看我另外一些文章
没耐心自己分析源码的同学,还可以参考Stay录制的视频版
另外怎么选择开源library,可以参考我的简书
更多技术心得分享
www.stay4it.com
六年移动开发设计经验
三年管理、一年个人创业
擅长需求分析、产品设计
项目架构、性能调优与 debug
有轻微代码洁癖,喜欢分享,但不过度
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
我们知道在 Android 开发中是可以直接使用现成的 api 进行网络请求的,就是使用 HttpClient、HttpUrlConnection 进行操作,目前 HttpClient 已经被废弃,而 android-async-http 是基于 HttpClient 的,...
参考Android网络请求心路历程Android Http接地气网络请求(HttpURLConnection) 一、对比 参考okhttp,retrofit,android-async-http,volley应该选择哪一个 HttpURLConnectionHttpURLC...
你从宿舍窗户递进来给生病的我的水很好喝!煞风景的柴如果没有出现在你旁边,那就更好了。
从1月份的微信公开课上张小龙提及了微信应用号的概念之后,到现在为止差不多半年多的时间过去了,正当很多人已经不在关注这个事情的时候,微信又来了一个“惊喜”。 昨天,微信“应用号”已经针对部分群体(开发者)发出了内测邀请,从昨天到今天,整个朋友圈以及媒体,都是微信“应用号”的讯...
之前在吴伯凡老师的日知录里读到了一个有趣的问题,重新整理分享。 “有一种动物堪称中国的国宝,虽然我们从没这样称呼过它,那是什么?”我看到这个问题苦思冥想,除了大熊猫进入了脑海竟没想到别的。“它可以说是一种改变了世界历史的动物。正是因为有了它,我们的祖先才创造出一种让整个是世...
昨天填写了离职表,今天上完最后一天班就成为自由职业了。这份工作时间也不短了,算起来也有一年半的时间了。除了在那家投资公司干的时间比这个长一点,好像在其他公司上班都还没有这个长呢。 我骨子里面可能就有不安分的因素,这样导致了我上班这五年多的时间,跳槽了四五次。每个工作平均干了...
全球首个载人飞行摩托,可由乘客像骑摩托车般驾驶航行。该飞行摩托有望成为未来主要交通工具。 制造商Hoversurf制造的此架单座飞行器天蝎Ⅲ(Scorpion-3),可搭载一名乘客飞行,并完全由其操纵。 该设备融合常规摩托设计与无人机技术。乘客可在天空中像骑自行车般操纵它。...1,334被浏览85,722分享邀请回答1036 条评论分享收藏感谢收起17114 条评论分享收藏感谢收起

我要回帖

更多关于 volley okhttp 的文章

 

随机推荐