首页 > 系统 > Android > 正文

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

2019-11-06 09:57:19
字体:
来源:转载
供稿:网友

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

一、网络框架:

1、android-async-http AsyncHttpClient:

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

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

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

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

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

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

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

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

自动的gzip响应解码;

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

永久的cookie保存,内部实现用的是Android的SharedPReferences;

通过BaseJsonHttpResponseHandler和各种json库集成;

支持SAX解析器;

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

2、okHttp:

一般的get请求一般的post请求基于Http的文件上传直接大文件下载加载图片支持请求回调,直接返回对象、对象集合支持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. 框架使用了很多设计模式(感兴趣的可以看看源码学习学习)

这里也列出缺点:

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

4、volley

适用于应用都是属于数据量不大,但网络通信频繁的;JSON,图像等的异步下载;网络请求的排序(scheduling);网络请求的优先级处理;缓存;多级别取消请求和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

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

2、picasso

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表