Android网络框架选择(Volley、OkHttp、Retrofit)

###**1. **


好早就在网上看网络框架源码的时候,突然看到有人在问Volley、OkHttp、Retrofit我到底应该用哪个呢?我其实想去回答但是又怕误导别人,今天随着项目的推进我们来对比一下,先上一张图:

     上面的这些应该都认识,我们使用第三方的开源库,说好听一点是为了降低开发周期和难度,说得不好听一点就不说了,要我自己去写我还真不知道该怎么办,我们只能来分析分析碰到个女鬼我们几个汉子该怎么分。     
###**2. **


  • **httpclient :**6.0中已移除,其封装库async-http也早已停止更新白扯;

  • **httpurlconnection :**sdk提供的网络类,我们可以用它结合asynctask封装自己的简单的网络库,自己写白扯;

  • **android-async-http:**停止更新白扯。

  • volley :   **功能:**基于HttpUrlConnection,封装了URL图片加载框架,支持图片加载,Activity和生命周期可以联动;   **性能:**可扩展性好,可支持HttpClient、HttpUrlConnection和Okhttp;   **应用场景:**适合轻量级网络交互,网络请求频繁,传输数据量小,不适合大数据的网络操作(比如下载视频、音频),所以不适合用来上传文件,分析源码从它入手也很不错;

  • okhttp :   功能:高性能Http请求库,可把它理解成是一个封装之后的类似HttpUrlConnection的一个东西,属于同级并不是基于二者,可以理解成为Socket(原生)+OkIo(IO的封装);   **性能:**基于NIO和Okio,所以性能比较好,请求处理速度快(IO:阻塞式;NIO:非阻塞式;Okio是Square公司基于IO和NIO做的一个更简单、高效处理数据流的一个库);   **应用场景:**重量级网络交互场景,网络请求频繁、传输数据量大(当然更推荐Retrofit,反正Retrofit是基于Okhttp的);

  • retrofit:   **功能:**基于Okhttp,restful Api设计风格,可通过注解配置请求包括请求方法,请求参数,请求头返回值等等,可以搭配多种Converter将获得的数据解析&序列化,其实就是 OkHttp 的封装版本,还提供对RxJava的支持;   **性能:**性能最好处理最快,因为是基于Okhttp封装所以扩展性差,这其实是高度封装所带来的后果;   **应用场景:**可以优先选择,特别是后台Api遵循restful的风格&项目中有使用RxJava;

###**3. **


Volley停止了更新,而OkHttp得到了官方的认可,并在不断优化。后面的新项目不建议使用了,推荐使用基于Retrofit2.0和OkHttp3的请求框架,老项目升级成本有点高,就不要再折腾了。但是没有最好只有更好后面还不知道出些什么逆天的网络框架,那如果随着版本迭代该使用新的网络框架怎么办?这是要思考的问题。

Retrofit因为也是square出的,参与开源的有个哥们大家肯定认识就是Jake Wharton,Retrofit 通过注解来配置请求参数,通过工厂来生成 CallAdapter,Converter,你可以使用不同的请求适配器(CallAdapter)。你可以使用不同的反序列化工具(Converter),比方说json, xml, moshi等等。

至于RxJava + OkHttp + Retrofit,最好充分理解其原理之后再使用,别为了装B而人云亦云,特别团队人数多的情况下,总得有个完全精通的吧,万一翻车掉坑里了呢?

总的来说,网络请求库没有说哪个最好,只有最合适,只有真的了解其使用场景才能很好的选择网络请求库,说了半天等于没说,选自己熟悉的,选大多数人选择的,就这么个标准。

既然第三方的如此多我们总得防止随着版本的迭代而去更换新的网络框架吧?那么下一期我们就来打造一套网络引擎用于随意切换第三方的开源框架。

所有分享大纲:2017Android进阶之路与你同行

视频讲解地址:http://pan.baidu.com/s/1pKWuZrX

你可能感兴趣的:(Android网络框架选择(Volley、OkHttp、Retrofit))