Android 网络框架(Android-async-http,OKHttp,retrofit,volley,xUtils,Afinal)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37278353/article/details/58079762
目前常用的网络框架,当然呢,每种网络框架都会有其优点和缺点的,主要是根据我们自身的项目进行选择:

1.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/

2.OKHttp(OKHttpClient)

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

3.retrofit 
这一篇学习的retrofit底层默认使用的就是okhttp,相信大家多少也听过这个框架,下面我们就来一起学习下,讲真,学会之后这个框架用起来真的很爽,特别灵活。

按照习惯先来说一下它的优缺点

优点: 
可以配置不同HTTP client来实现网络请求,如okhttp、httpclient等 
请求的方法参数注解都可以定制 
支持同步、异步和RxJava 
超级解耦 
可以配置不同的反序列化工具来解析数据,如json、xml等 
使用非常方便灵活 
框架使用了很多设计模式(感兴趣的可以看看源码学习学习) 
缺点: 
不能接触序列化实体和响应数据 
执行的机制太严格 
使用转换器比较低效 
只能支持简单自定义参数类型 
相关学习资料的网址 
retrofit官网: http://square.github.io/retrofit/ 
github地址: https://github.com/square/retrofit 
Simple HTTP with Retrofit2: 
https://realm.io/news/droidcon-jake-wharton-simple-http-retrofit-2/

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

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

5.xUtils简介 
xUtils 包含了很多实用的android工具。 
xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响… 
xUitls最低兼容android 2.2 (api level 8) 
目前xUtils主要有四大模块: 
DbUtils模块:

android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
1
2
3
4
5
6
ViewUtils模块:

android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的11种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
1
2
3
HttpUtils模块:

支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
1
2
3
4
5
BitmapUtils模块:

加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
1
2
3
4
使用xUtils快速开发框架需要有以下权限:

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
1
混淆时注意事项: 
添加Android默认混淆配置${sdk.dir}/tools/proguard/proguard-android.txt 
不要混淆xUtils中的注解类型,添加混淆配置:-keep class * extends java.lang.annotation.Annotation { *; } 
对使用DbUtils模块持久化的实体类不要混淆,或者注解所有表和列名称@Table(name=”xxx”),@Id(column=”xxx”),@Column(column=”xxx”),@Foreign(column=”xxx”,foreign=”xxx”);

6.Afinal 
Afinal 是一个android的sqlite orm 和 ioc 框架。同时封装了android中的http框架,使其更加简单易用; 
使用finalBitmap,无需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图片加载位置错位等问题。 
Afinal的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。 
目前Afinal主要有四大模块: 
FinalDB模块:Android中的orm框架,一行代码就可以进行增删改查。支持一对多,多对一等查询。 
FinalActivity模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。 
FinalHttp模块:通过httpclient进行封装http数据请求,支持ajax方式加载。 
FinalBitmap模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出现 的oom和android容器快速滑动时候出现的图片错位等现象。FinalBitmap可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画 等。FinalBitmap的内存管理使用lru算法,没有使用弱引用(android2.3以后google已经不建议使用弱引 用,android2.3后强行回收软引用和弱引用,详情查看android官方文档),更好的管理bitmap内存。FinalBitmap可以自定义 下载器,用来扩展其他协议显示网络图片,比如ftp等。同时可以自定义bitmap显示器,在imageview显示图片的时候播放动画等(默认是渐变动 画显示)。
 ———————————————— 
版权声明:本文为CSDN博主「安之若素i」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37278353/article/details/58079762

猜你喜欢

转载自blog.csdn.net/u010312937/article/details/100090285