Retrofit是啥
A type-safe HTTP client for Android and Java
翻译:Android和Java使用类型安全的Http客户端
Retrofit的前世今生
Http客户端用来做网络访问,网络访问,对绝大多数应用来说是一个基础功能
我们来简单回顾下网络访问框架的发展史:
1. HttpUrlConnection和HttpClient。Android2.1时代,还没有什么框架流行,请求网络都用这个。HttpUrlConnection刚出来的时候Bug巨多,比如说—对一个可读的InputStream调用close()方法时,就有可能会导致连接池失效了。后面一直有人在维护,在Android 2.3版本的时候,谷歌加入了更加透明化的响应压缩。 在Android 4.0版本中,又添加了一些响应的缓存机制。HttpClient是Apache的,出来的时候比较稳定,但是Android官方对它一直都没怎么维护,甚至从Android5.1版本开始已经把它从SDK移除了,如果还在使用的同学需要自己去手动导入Apache的包。
2. android-async-http。随后又出现了async-http,它在一些反面做了升级,实现了简单的封装,框架雏形。比如:
1. 异步请求能力,匿名回调处理Response
2. 内部使用线程池来处理并发请求,线程重用提高效率
3. Http请求,发生再异步线程
3. Afindl,Xutils。包含网络访问框架,图片加载,数据库,控件绑定框架合成的一系列框架的集合框架。当年他们可是风靡一时,这个很好、很中国。就像小时候玩”学习机”,小霸王其乐无穷时代,4合一、8合一、99合一的赶脚。回过头看,这种框架特别符合中国人的思维方式—极致的使用主义,包含所有,中庸之道。但是兼顾太多,维护框架的人精力又是有限的,很容易就顾此失彼,慢慢的。绑定控件被ButterKnife,Dragger替代;图片加载慢慢的被ImageLoader替代,后来又被Picasso、Glide、Fresco替代;ORM数据库被GreenDao、ORMLite替代;网络–Volley替代;
4. Volley,不可否认Volley是一个出色的网络框架Volley源码解析,拓展性强,设计优雅。
5. OkHttp,Volley虽好但是奈何不住没人维护啊,直接再应用层使用看着臃肿,要自己再封装一次。Volley 默认根据 Android 系统版本使用不同的 Http 传输协议实现.在 Android 3.0 以上 Volley 使用 ApacheHttpStack 作为传输协议, 在2.3 及以下使用 HttpURLConnection 作为传输层协议。注意:3.0以上使用ApacheHttpStack作为传输协议这句话,谷歌从Android5.1开始已经把Apache的东西从SDK中移除了,后面就产生了问题。有很多文章说使用OkHttp+Volley联合开发,最开始看到的时候感觉很迷糊,有了OKHttp干嘛还要加上Volley做网络访问。后面想想应该是这么回事:老项目使用了Volley框架,但是传输协议ApacheHttpStack别人干掉了,所以添加OkHttp框架来做传输就行了,以前的代码不用再修改。
当然OkHttp 是 Square 公司开源的一个 HTTP 网络框架,广受好评。
好了,闲话扯得够多了,步入我们的正题—Retrofit
Retrofit和OkHttp的关系
从字面上理解Retrofit翻译为—改进、改装、对…作样式翻新
同样是Square
公司出品,同样是用作Http Client,Retrofit后于OkHttp,这个翻新的对象明显就是OkHttp了。
当然并不是说就直接覆盖替换了OkHttp,相反OkHttp的功能实现和架构还是很漂亮的。从Retrofit2.0开始内置OkHttp,如果把OkHttp比作一间房子,Retrofit更像是在给房子做装修,让房间变得更好看,没宜居,至于底层的连接、通信、重试这些Retrofit都不关心,交给OkHttp去完成就好。
总之:
- OkHttp专注和服务层Api打交道,提供更稳定可靠的连接
- Retrofit专注和App打交道,提供更友好,易懂易维护的访问方式
为啥说Retrofit写得代码像艺术
多说无益,show me the code
。
例如我们要实现如下展示的功能:
不用Retrofit我们怎么写的代码
步骤:
1. 需要一个服务端Api
接口已准备好: