Android:android的框架区别(网络框架、图片异步加载与缓存框架、数据框架)特点整理

在我们安卓开发中,很多繁琐的代码会很头疼,编写程序的周期会增加,因此很多框架都冒出来了,我们在搞懂底层原理之时,我们更应该学会用一些优秀框架来解决复杂代码,和繁琐的重写代码。因为针对最简单的case,我只需要提供request url,成功时的callback和(或)失败时的callback,仅此而已。这篇文章就大概的整理了一些框架的特点和区别,可以针对性的选择开发。

一、网络框架:

1、android-async-http AsyncHttpClient:

  1. http请求发生在UI线程之外;

  2. 内部采用线程池来处理并发请求;

  3. GET/POST 参数构造,通过RequestParams类。

  4. 内置多部分文件上传,不需要第三方库支持;

  5. 流式Json上传,不需要额外的库;

  6. 能处理环行和相对重定向;

  7. 和你的app大小相比来说,库的size很小,所有的一切只有90kb;

  8. 自动智能的请求重试机制在各种各样的移动连接环境中;

  9. 自动的gzip响应解码;

  10. 内置多种形式的响应解析,有原生的字节流,string,json对象,甚至可以将response写到文件中;

  11. 永久的cookie保存,内部实现用的是Android的SharedPreferences;

  12. 通过BaseJsonHttpResponseHandler和各种json库集成;

  13. 支持SAX解析器;

  14. 支持各种语言和content编码,不仅仅是UTF-8。

2、okHttp:

  1. 一般的get请求
  2. 一般的post请求
  3. 基于Http的文件上传
  4. 直接大文件下载
  5. 加载图片
  6. 支持请求回调,直接返回对象、对象集合
  7. 支持session的保持

3、retrofit:
Retrofit与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,其主要作者是Android大神JakeWharton。

优点:
1. 可以配置不同HTTP client来实现网络请求,如okhttp、httpclient等
2. 请求的方法参数注解都可以定制
3. 支持同步、异步和RxJava
4. 超级解耦
5. 可以配置不同的反序列化工具来解析数据,如json、xml等
6. 使用非常方便灵活
7. 框架使用了很多设计模式(感兴趣的可以看看源码学习学习)

这里也列出缺点:

  1. 不能接触序列化实体和响应数据
  2. 执行的机制太严格
  3. 使用转换器比较低效
  4. 只能支持简单自定义参数类型

4、volley

  1. 适用于应用都是属于数据量不大,但网络通信频繁的;
  2. JSON,图像等的异步下载;
  3. 网络请求的排序(scheduling);
  4. 网络请求的优先级处理;
  5. 缓存;
  6. 多级别取消请求
  7. 和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)

5、XUtils
DbUtils模块:
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
ViewUtils模块:
android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
HttpUtils模块:
支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
BitmapUtils模块:
加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等…

6、Afinal
afinal是一个开源的android的orm和ioc应用开发框架,其特点是小巧灵活,代码入侵量少。
通过afinal的ioc框架,诸如ui绑定,事件绑定,通过注解可以自动绑定。通过afinal的orm框架,无需任何配置信息,一行代码就可以对android的sqlite数据库进行增删改查操作。同时,afinal内嵌了finalHttp等简单易用的工具,可以轻松的对http请求进行操作。


二、图片异步加载与缓存框架:

1、android universal image loader

  1. 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
  2. 支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
  3. 支持图片的内存缓存,文件系统缓存或者SD卡缓存
  4. 支持图片下载过程的监听
  5. 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
  6. 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
  7. 提供在较慢的网络下对图片进行加载

2、picasso

  1. 在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题。
  2. 使用复杂的图片压缩转换来尽可能的减少内存消耗
  3. 自带内存和硬盘二级缓存功能
  4. 使用ListView,GridView的时候,自动检测Adapter的重用(re-use),取消下载,使用缓存。
  5. 将图像进行变换,以更好的适应布局控件等,减小内存开销。
  6. 支持设置加载之前的图片,和加载失败后的图片。
  7. 支持加载本地图片和sdcard中的图片文件等。

三、数据库框架

1、ormlite

优点:
文档较全面,社区活跃,有好的维护,使用简单,易上手。

缺点:
基于反射,效率较低

2、GreenDao
优点:
效率很高,插入和更新的速度是sqlite的2倍,加载实体的速度是ormlite的4.5倍。官网测试结果
文件较小(<100K),占用更少的内存 ,但是需要create Dao,
操作实体灵活:支持get,update,delete等操作
另外GreenDao支持Protocol buffers协议数据的直接存储 ,如果通过protobuf协议和服务器交互,不需要任何的映射。

缺点:
学习成本较高。其中使用了一个java工程根据一些属性和规则去generate一些基础代码,类似于javaBean但会有一些规则,另外还有QueryBuilder、Dao等API,所以首先要明白整个过程,才能方便使用。没有ORMLite那样封装的完整,不过greenDao的官网上也提到了这一点,正是基于generator而不是反射,才使得其效率高的多。


四、统计框架

1、MPAndroidChart详解
1. 支持x,y轴缩放
2. 支持拖拽
3. 支持手指滑动
4. 支持高亮显示
5. 支持保存图表到文件中
6. 支持从文件(txt)中读取数据
7. 预先定义颜色模板
8. 自动生成标注
9. 支持自定义x,y轴的显示标签
10. 支持x,y轴动画
11. 支持x,y轴设置最大值和附加信息
12. 支持自定义字体,颜色,背景,手势,虚线等

2、helloCharts

  • 支持缩放、滑动以及平移。Zoom(pinch to zoom, double tap zoom), scroll and fling
  • 支持自定义坐标轴(比如坐标轴位置:上下左右内部),支持自动生成坐标轴。Custom and auto-generated axes(top, bottom, left, right, inside)
  • 动画(Animations)
  • 支持预览,即在chart下面会有一个坐标密度更细的附属chart,当选中附属chart的某一区域,附属chart上面的chart会显示选中区域的更详细情况。

    HelloCharts支持以下chart类型:

  • Line chart(cubic lines, filled lines, scattered points)
  • Column chart(grouped, stacked, negative values)
  • Pie chart
  • Bubble chart
  • Combo chart(columns/lines)
  • Preview charts(for column chart and line chart)

ps:
如果你需要很多的功能,各种组合,或者显示,对界面没有太大的要求的话就选择MPchart。
如果你需要的是能满足基本的图表功能同时,还要兼顾美观性,流畅性,强烈建议hellochart。

你可能感兴趣的:(安卓框架)