五、网络框架分类与选择

网络框架分类

(一)底层网络框架

HttpClient, HttpURLConnection,OkHttp 属于底层的网络框架,这些框架是底层真正发起http请求的。

     1.HttpClient是Apache公司提供的原始的http协议库,在2.2之前,官方推荐使用HttpClient.

        优点:功能丰富,非常稳定,bug极少

        缺点:数量众多的API使得在保证兼容的情况下很难改进,这也是Google官方放弃HttpClient的主要原因

       发展:2.2之前HttpClient是最佳选择,2.3之后, Google官方建议使用HttpURLConnection. 

                Android6.0以后Google官方Api移除HttpClient

      httpclient Android6.0问题及解决

      问题:Android6.0以后Google官方Api移除HttpClient,继续使用HttpClient及基于其封装的网络库会出异常

      解决:在 build.gradle 文件中声明以下编译时依赖项:

             android {

                               useLibrary ‘org.apache.http.legacy’

                         }

       2.HttpURLConnection是Sun公司提供的原始的http协议库,也是Java的标准类库java.net中的一员

        优点:HttpURLConnection 是通用的轻量级的 HTTP 客户端工具,适用于大部分应用程序。

                     增加了压缩(2.3)和缓存(4.0),减少了网络使用,提高了速度,节省了电量

                     因为API较少,所以可以在保证兼容性的前提下做改进,这也是官方选择HttpURLConnection取代HttpClient的主要原因

        2.2之前存在的问题及解决

                在 Android 2.2 之前的版本中,存在一些 bug;尤其是在可读的输入流中调用 close(),会污染连接池

                解决:关闭连接池以保证正常使用

    3.okhttp是 Square 公司开源的针对 Java 和 Android 程序,封装的一个高性能 http 请求库。Android 4.4后,HttpURLConnection底层实现使用的就是OkHttp,在 Android 6.0 中底层的源码已经使用了 OKHttp 

           优点:a.对同一个主机发出的所有请求都可以共享相同的套接字连接

                     b.使用连接池来复用连接以提高效率

                     c.提供了对 GZIP 的默认支持来降低传输内容的大小

                     d.对 HTTP 响应的缓存机制,可以避免不必要的网络请求

                     e.当网络出现问题时,OkHttp 会自动重试一个主机的多个 IP 地址

                     f.支持同步阻塞请求和异步请求两种方式

                     g.支持Android2.3+ java 1.7+

                     h.基于NIO与OKIO,所以效率更高

                     i. 支持 spdy、http 2.0、websocket ,支持同步、异步,而且 OkHttp 又封装了线程池,封装了数据转换,封装                    了参数使用、错误处理等,api 使用起来更加方边

             缺点:使用是需要进行一次封装

(二)封装的网络框架

 Android-async-http, Volley, retrofit属于对底层网络框架的封装,比如Volley内部使用的就是HttpURLConnection和 HttpClient, retrofit是     基于OkHttp 的封装

       1.Android-async-http 是一个强大的网络请求库,这个网络请求库是基于 Apache HttpClient 库之上的一个异步网络请        求处理库,网络处理均基于 Android 的非 UI 线程,通过回调方法处理请求结果。 可惜的是 Android 6.0 (api 23)                SDK,不再提供 org.apache.http.* (只保留几个类)。

       优点:a. 在匿名回调中处理请求结果  

                  b. 在 UI 线程外进行 http 请求   

                  c. 文件断点上传   

                  d. 智能重试   

                  e. 默认 gzip 压缩   

                  f. 支持解析成 Json 格式 

                  g. 可将 Cookies 持久化到 SharedPreference

        缺点:Android5.0以后不推荐使用HttpClient,作者已停止更新

      2.Volley是2013年Google I/O大会上推出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持                                    HttpClient、HttpUrlConnection,甚至支持 OkHttp。而且 Volley 里面也封装了 ImageLoader ,所以如果你愿意            你甚至不需要使用图片加载框架,不过这块功能没有一些专门的图片加载框架强大,对于简单的需求可以使用,对于稍复            杂点的需求还是需要用到专门的图片加载框架

                 优点: a.自动调度网络请求; 

                            b.高并发网络连接; 

                            c.通过标准的 HTTP cache coherence(高速缓存一致性)缓存磁盘和内存透明的响应; 

                            d.支持指定请求的优先级( 请求队列的优先级排序); 

                            e. 提供多样的取消机制:网络请求 cancel 机制,我们可以取消单个请求,或者指定取消请求队                               列中的一个区域; 

                            f.框架容易被定制,例如,定制重试或者回退功能; 

                            g.包含了调试与追踪工具; 

                            h.默认 Android2.3 及以上基于 HttpURLConnection,2.3 以下使用基于 HttpClient 

                            i.提供简便的图片加载工具(其实图片的加载才是我们最为看重的功能)

                缺点: 不能下载文件

       3.Retrofit与okhttp一样出自于Square公司。Retrofit是一套 RESTful 网络框架,底层网络框架使用的是                                  OkHttp(Retrofit 2.0开始不支持其他底层网络框架)




        优点: a.支持 okhttp 

                  b.注解处理,简化代码 

                  c.支持上传和下载文件 

                  d.支持自己更换解析方式 ,比如你可以自定义json解析框架比如Gson,Jackson等

                  e.支持多种http请求库

                  f.支持RxJava,这也是很多人选择它的原因。

         缺点:门槛较高,学习成本高

                  目前 RxJava+Retrofit+OkHttp + Dagger2  是网络框架最好的选择了

                  框架学习: https://blog.csdn.net/wb_001/article/details/76922779

                  Retrofit学习: https://blog.csdn.net/qq_36347817/article/details/80636418

                  Rxjava学习 :http://gank.io/post/560e15be2dca930e00da1083#toc_1

                  OKHttp学习:

                  Dagger2学习:

(三)大而全的框架

 Afinal和xUtils等大而全的框架,包括网络框架,数据库,图片加载等,不建议使用这类的框架,不好维护,并且这种框架在每个模块都做的不精。

接下来我们来看下我们国人封装的两个框架 Afinal 框架和 xUtils ,这两个框架的作者已经停止更新了,因此现在就不推荐使用了

1.Afinal 是一个 android 的 sqlite orm 和 ioc 框架。同时封装了android中的http框架,使其更加简单易用;使用 finalBitmap,无需考虑 bitmap 在 android 中加载的时候 oom 的问题和快速滑动的时候图片加载位置错位等问题。Afinal的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。Afinal主要是分四个模块: 

(1) 数据库模块(2) 注解模块 (3) 网络模块(4) 图片缓存模块

 2.xUtils跟Afinal是同类型的框架, 现在作者已经两三年前就没有进行更新了。

上面网络框架其实就个人而已,就不推荐使用了,要不就是功能太过丰富,如果在主流的 app 中使用,对后期的维护, 代价就很大了。比如你发现你框架中不适合使用某个功能,需要替换这部分的框架,你就会发现,你整个项目都不出现这个框架的影子,对于后期维护的成本实在是太大了!

总结:后面的几个网路框架(okhttp , retrofit)是目前较好的网络框架,在公司也发现,很多项目都是使用这几个网络框架的。这两个网络开源框架都是 square 公司提供的,在开源界中,有两家公司提供的网络框架是非常丰富的,一个是 square 和 Facebook ,真心感谢这两个公司。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值