项目开发中网络框架的选择

Android常用的网路框架:
大多数应用程序基本都需要连接网络,发送一些数据给服务端,或者从服务端获取一些数据。通常在 Android 中进行网络连接一般使用 Scoket 和HTTP,HTTP 请求方式比 Scoket 多得多。HTTP 请求一般采用原生的 HttpClient 和 HttpUrlConnection 的两种网络访问方式。可是在 Android 5.0 的时候 Google 就不推荐使用 HttpClient 了,到了 Android 6.0 (api 23) SDK,不再提供 org.apache.http.* (只保留几个类), 因此,设置 android SDK 的编译版本为23时,且使用了 httpClient 相关类的库项目:如 android-async-http 等等,会出现有一些类找不到的错误。

列举目前常用的网络框架,当然呢,每种网络框架都会有其优点和缺点的,主要是根据我们自身的项目进行选择:

1.Volley
Volley 的中文翻译为“齐射、并发”,是在 2013 年的 Google 大会上发布的一款 Android 平台网络通信库,具有网络请求的处理、小图片的异步加载和缓存等功能,能够帮助 Android APP 更方便地执行网络操作,而且更快速高效。

在 Google IO 的演讲上,其配图是一幅发射火弓箭的图,有点类似流星。这表示,Volley 特别适合数据量不大但是通信频繁的场景。见下图:

优点:
(1)自动调度网络请求;
(2)高并发网络连接;
(3)通过标准的 HTTP cache coherence(高速缓存一致性)缓存磁盘和内存透明的响应;
(4)支持指定请求的优先级( 请求队列的优先级排序);
(5) 提供多样的取消机制:网络请求 cancel 机制,我们可以取消单个请求,或者指定取消请求队列中的一个区域;
(6)框架容易被定制,例如,定制重试或者回退功能;
(7)包含了调试与追踪工具;
(8)默认 Android2.3 及以上基于 HttpURLConnection,2.3 以下使用基于 HttpClient
(9)提供简便的图片加载工具(其实图片的加载才是我们最为看重的功能)

缺点:
(1)不能下载文件:这也是它最致命的地方

官网或相关地址:
Volley 的 github 地址:https://github.com/mcxiaoke/android-volley;
Google I/O 2013 – Volley: Easy, Fast Networking for Android:https://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded
简单的使用:http://www.dengzhr.com/others/mobile/android/762

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

优点:
(1) 在匿名回调中处理请求结果
(2) 在 UI 线程外进行 http 请求
(3) 文件断点上传
(4) 智能重试
(5) 默认 gzip 压缩
(6) 支持解析成 Json 格式
(7) 可将 Cookies 持久化到 SharedPreference

官网或相关地址:
Android-async-http 的 github 地址:https://github.com/loopj/android-async-http
官网教程:http://loopj.com/android-async-http/

接下来我们来看下我们国人封装的两个框架 Afinal 框架和 xUtils ,这两个框架的功能非常的丰富,甚至提供了数据库的封装,这很符合我们国人开发的App,都是把一大堆的功能都集进去,那这么强大的网络框架是不是真的那么强大呢?通常我们都会这样想:功能越丰富的开源框架,那么它在单一的功能上,比如就网络框架这一部分,是不是就没有其他专一网络的框架好呢?

注:这两个框架的作者已经停止更新了,因此现在就不推荐使用了

3.Afinal
Afinal 是一个 android 的 sqlite orm 和 ioc 框架。同时封装了android中的http框架,使其更加简单易用;使用 finalBitmap,无需考虑 bitmap 在 android 中加载的时候 oom 的问题和快速滑动的时候图片加载位置错位等问题。

Afinal的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。

Afinal主要是分四个模块:
(1) 数据库模块:android 中的 orm 框架,使用了线程池对 sqlite 进行操作。
(2) 注解模块:android 中的 ioc 框架,完全注解方式就可以进行UI绑定和事件绑定。无需 findViewById 和 setClickListener 等。其实它后面是使用反射来进行初始化的。
(3) 网络模块:通过 httpclient 进行封装 http 数据请求,支持 ajax方式加载,支持下载、上传文件功能。
(4) 图片缓存模块:通过 FinalBitmap,imageview 加载 bitmap 的时候无需考虑 bitmap 加载过程中出现的 oom 和 android 容器快速滑动时候出现的图片错位等现象。

官网或相关地址:
Afinal框架 的 github 地址:https://github.com/yangfuhai/afinal

注:这个框架的作者已经停止更新了,因此现在就不推荐使用了

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

官网的简介:
xUtils3 api 变化较多, 已转至 https://github.com/wyouflf/xUtils3
xUtils 2.x 对 Android 6.0兼容不是很好, 请尽快升级至 xUtils3.
xUtils 包含了很多实用的android工具。
xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的 ORM,更多的事件注解支持且不受混淆影响…
xUitls 最低兼容android 2.2 (api level 8)

官网或相关地址:
Afinal框架 的 github 地址:https://github.com/wyouflf/xUtils

注:这个框架的作者已经停止更新了,因此现在就不推荐使用了

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

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

5.OKHttp
OkHttp 是一个相对成熟的解决方案,据说 Android4.4 的源码中可以看到 HttpURLConnection 已经替换成 OkHttp 实现了。在 Android 6.0 中底层的源码已经使用了 OKHttp ,这个是可以确定的。

OkHttp 处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个 IP 连接失败的时候,OkHttp 会自动尝试下一个 IP。OkHttp 还处理了代理服务器问题和 SSL握手失败问题。

使用 OkHttp 无需重写您程序中的网络代码。OkHttp 实现了几乎和Java.NET.HttpURLConnection 一样的API。如果你用了 Apache HttpClient,则 OkHttp 也提供了一个对应的 okhttp-apache 模块。

官网或相关地址:
OKHttp 的 github 地址:https://github.com/square/okhttp

6.retrofit
其实 retrofit 是根据 OKHttp 封装的框架,它的底层网络请求就是使用OKHttp的,这个框架的作者也是非常有名的,就是 Jake Wharton 。简直就是我的偶像啊!

优点:
(1)支持 okhttp
(2)注解处理,简化代码
(3)支持上传和下载文件
(4)支持自己更换解析方式
(5)支持多种http请求库

官网或相关地址:
OKHttp 的 github 地址:https://github.com/square/retrofit

选择开源框架的见解:

1.学习的成本:对该框架学习的时间长短,文档是否齐全的考虑
2.流行的程度:该开源框架是否流行,github 上 start 的个数,都是我们考量的标准
3.是否还在维护:如果该框架没人维护了,随着技术的不断更新,都会出现大大小小的问题的
4.代码的体积: 体积当然不能太大了
5.代码的设计: 整体框架的设计

本文转载至:http://blog.csdn.net/Two_Water/article/details/53055524

Android之---项目开发中网络框架的选择相关推荐

  1. cocos2dx之lua项目开发中MVC框架的简单应用

    **************************************************************************** 时间:2015-03-31 作者:Sharin ...

  2. 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一)

    上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 上篇文章中给大家简单介绍了一些业务,上门洗车APP --- Android客户端开发 前言及业务简介,本篇文章给大家介绍下 ...

  3. 鸿蒙开发之网络框架搭建,MVP+Retrofit2+okhttp3+Rxjava2+RxHarmony

    抓住人生中的一分一秒,胜过虚度中的一月一年! 小做个动图开篇引题 鸿蒙背景 2020年9月10号,鸿蒙2.0(HarmonyOS 2.0)系统正式发布,鸿蒙2.0面向应用开发者发布Beta版本,在20 ...

  4. Vue项目开发中的点滴积累系列文章

    题记 -- 严于律己,精于行动,点滴积累,着眼未来,你也许不负青春 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架 本文章 记录从基础入门到实际项目开发中的点点 ...

  5. React项目开发中的数据管理

    原文链接:https://blog.csdn.net/hl582567508/article/details/76982756 redux中文文档:http://cn.redux.js.org/ Re ...

  6. ssh项目同时使用mysql跟sqlserver数据库_MSSQL_如何把sqlserver数据迁移到mysql数据库及需要注意事项,在项目开发中,有时由于项目 - phpStudy...

    如何把sqlserver数据迁移到mysql数据库及需要注意事项 在项目开发中,有时由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Serve ...

  7. 软件项目开发中的百分之九十效应

    在软件项目管理中,经常遇到这样的情况:进度到百分之九十后开始停滞,要花很长很长时间很大很大代价(甚至超过前百分之九十所花费的工时.工期)才能完成最后的百分之十.我把这种情况叫作:软件项目的百分之九十效 ...

  8. Android短视频开发中的sdk接入方案

    目前短视频平台非常火,云豹科技作为优质的app源码提供商,在短视频开发领域有丰富的经验和完善的技术.下面以云豹短视频为例,概述Android短视频开发中的sdk接入方案,这里我们选择腾讯云的sdk进行 ...

  9. 面试中常问的你在项目开发中遇到过哪些问题怎么回答?

    一.你在项目开发中遇到过哪些问题? 此问题的回答一般从三个方向入手,一是技术问题,二是解决方案问题,三是甲方或团队配合问题,针对这三个方面的问题回答示例. 一.技术方面: 开发项目过程中遇到问题是难免 ...

最新文章

  1. 1088 三人行(20 分)
  2. 八卦一下 惠普曾是Oracle的练爱对象
  3. UDP Socket编程 C/C++实现 (Windows Platform SDK)
  4. python将print内容输入txt_Python将矩阵写入txt文件,保持格式
  5. jQuery EasyUI datagrid实现本地分页的方法
  6. UVa 10986 - Sending email
  7. 送书《数据库系统概念》,送课,SQL必备!!
  8. 代理(Proxy)和背靠背用户代理(B2BUA)
  9. 软件工程造价师和软件造价评估师有什么区别?
  10. 怎么还原mysql的数据库文件_.sql数据库文件如何还原?
  11. 月薪1万在中国是什么水平?答案揭露残酷的收入真相
  12. Unicode与GB18030、GBK、GB2312
  13. SpringBoot之SpringData JPA的基本使用
  14. 读书杂抄之《挪威的森林》
  15. 图像、图形、图片文件格式
  16. DISM命令常见用法
  17. 未来的计算机320学作文,320字的作文四年级
  18. 探究音节bo、po、 mo、 fo韵母的实际发音
  19. STM32应用IAP进行程序更新详解及实例
  20. git报错git@gitlab.com: Permission denied

热门文章

  1. 基于SadTalker的AI主播,Stable Diffusion也可用
  2. 跟燕十八学习PHP-第十八天-开发项目(2)
  3. 静态链接库(.lib)和动态链接库(.dll)的使用
  4. 多项式mod的运算(例题)
  5. JavaScript 写了桥牌发牌模拟
  6. PotPlayer不支持S/W HEVC(H.265)解码怎么办
  7. JAVA零基础小白入门上手教程之day22-JDK新特性
  8. 作业帮拍图API对接
  9. 图像处理(二)——图像频域滤波
  10. MySQL中between和大于小于的比较