位置: 编程技术 - 正文

开源项目源码解析-xUtils 源码解析(开源项目怎么做)

编辑:rootadmin
xUtils 源码解析

推荐整理分享开源项目源码解析-xUtils 源码解析(开源项目怎么做),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:开源的项目是什么意思,开源项目介绍,开源项目有什么用,开源项目怎么做,开源项目源码解决方案,开源项目代码,开源项目源码解决方案,开源项目源码解决方案,内容如对您有帮助,希望把文章链接给更多的朋友!

本文为 Android 开源项目源码解析 中 xUtils 部分。项目地址:xUtils,分析的版本:c2ac,Demo 地址:xUtils Demo分析者:Caij,校对者:maogy,校对状态:未完成

1. 功能介绍

xUtils一个Android公共库框架,主要包括四个部分:View,Db, Http, Bitmap 四个模块。

View模块主要的功能是通过注解绑定UI,资源,事件。Db模块是一个数据库orm框架, 简单的语句就能进行数据的操作。Http模块主要访问网络,支持同步,异步方式的请求,支持文件的下载。Bitmap模块是加载图片以及图片的处理, 支持加载本地,网络图片。而且支持图片的内存和本地缓存。2. 详细设计2.1 View模块2.1.1 总体设计

流程和关系较少, 请看下面的详细分析

2.1.2 流程图

2.1.3 核心类功能介绍请先了解注解 ,动态代理 可以帮助到您, 如果已经了解请忽略。

注解和反射知识是这个模块的主要内容

1.ViewUtils.java

View和各种事件的注入以及资源的注入。

(1)主要函数

第一个参数Object handler代表的是需要注入的对象, 第二个参数是需要注入View(这个View就是handler的成员变量)所在的View或者Activity的包装对象。该方法完成了View和各种事件的注入以及资源的注入。主要的原理就是通过反射和注解。

完成Activity的setContentView。完成View的注入。完成资源的注入。完成各种事件的注入。2.ViewFinder.java(1)主要函数

如果存在父View, 优先从父View寻找,否则从当前的View或者Activity中寻找。

3.ResLoader.java

获取资源文件&#;。支持多种资源的获取。

4.EventListenerManager.java

事件的注入, 其中的设计是通过动态代理。

存放监听事件接口map。 因为有些接口有多个函数, 代理会判断事件接口是否存在, 如果存在只增加代理方法就够了, 避免重新设置监听事件接口。

代理监听事件

5.注解类2.2 Db模块2.2.1 总体设计

流程和关系较少, 请看下面的详细分析

2.2.2 流程图

2.2.3 核心类功能介绍

注解、反射和数据库操作知识这个模块的主要内容

1.DbUtils.java

主要功能数据库的创建,数据库的增删改查。

存放DbUtils实例对象的map,每个数据库对应一个实例, key为数据库的名称。

采取的是单例模式,根据DaoConfig创建数据库, 中间还涉及到数据库升级。

增删改查。

2.DaoConfig.java

数据库配置类。

3.FindTempCache.java

在DbUtils的查询数据中

数据库查询数据的缓存。在查询中会优先调用缓存中的数据

4.SqlInfoBuilder.java

sql建表、增删改语句的组合。

5.SqlInfo.java

sql语句和&#;包装对象。

6.Table.java

表对象。

7.Column.java

表中列对象。

8.Id.java

表对应的主键对象。

9.Selector.java开源项目源码解析-xUtils 源码解析(开源项目怎么做)

sql查询语句的组合。

.WhereBuilder.java

sql条件语句的组合。

DBUtils增删改查:

操纵数据库的工具类,无论多牛X,总离不开最根本的CRUD,即创建,查询,更新和删除。下面从这四个角度依次介绍xUtils是如何简便持久化数据的。大家都知道,在Android里面如果要存储一个对象,我们需要创建一个SQLiteOpenHelper,然后还得创建一张对应对象各个属性的表,还得继续把我们的对象转换成ContentValues,进而去存储。真心是麻烦的不能再麻烦了,我们现在介绍的DbUtils就能让你轻松解脱麻绳一样的代码。DbUtils在进行save操作的时候,会根据java反射反射出对象的各个字段,然后去查询数据库中是否存在这个对象类型对应的表,如果表已经存在,直接进行插入操作;如果不存在,就先动态的创建的一张对应我们对象的表,再进行插入处理。直接上代码,大家看。

[java] view plaincopy@OnClick(R.id.insert) public void insert(View v) { Student stu = null; for (int i = 0; i < ; i&#;&#;) { stu = new Student(); stu.setAge( &#; i); stu.setName("jack" &#; i); mList.add(stu); try { dbUtils.save(stu); } catch (DbException e) { e.printStackTrace(); } } } 注意:并不是所有的实体对象都快可以通过这种方式去存储,一定要保证对象的类型中有int类型的id或者_id的属性,这就对应数据库表中的主键字段。如果类型中没有id字段,可以通过@Id注解去指定一个int类型的字段作为主键。如果表中的又字段不想被存储在数据库中,也可以通过@Transient去实现忽略。如果直接存储一个对象的列表,这样也是被允许的,达到批量存储的目的。

DbUtils可以帮助对SQL语句不是很熟悉的同学快速的实现查询,而不用去写sql查询语句,而且可以对查询结果进行排序和分页,使用简单,功能强大。大家可以看下,下面的几行代码就能实现复杂的查询功能

[java] view plaincopydbUtils.findAll(Selector.from(Student.class) .where("_id", "<", ).and("age", ">", ).orderBy("_id") .limit(pageSize).offset(pageSize * pageIndex)); 同样的,也可以对数据库中得数据进行便捷的更新。下面演示的是更新Student对应的表中的第一条记录的age这个字段。这个比较简单,就直接上代码看吧。[java] view plaincopy@OnClick(R.id.update) public void update(View v){ try { List<Student> stus = dbUtils.findAll(Selector.from(Student.class)); Student stu = stus.get(0); stu.setAge(); dbUtils.update(stu); } catch (DbException e) { e.printStackTrace(); } } 最后一个就是数据的删除。一个实体对象,一组实体对象,根据条件删除,删除表,删除整个数据库,这些操作都可以通过一句简单的代码来实现,看了代码就明白了。[java] view plaincopy@OnClick(R.id.delete) public void delete(View v){ try { List<Student> stus = dbUtils.findAll(Selector.from(Student.class)); dbUtils.delete(stus.get(0)); dbUtils.deleteAll(stus); dbUtils.deleteById(Student.class, WhereBuilder.b("age", "==", )); dbUtils.dropTable(Student.class); dbUtils.dropDb(); } catch (DbException e) { e.printStackTrace(); } } 2.3 Http模块2.3.1 总体设计

2.3.2 流程图

2.3.3 类图

1.HttpUtils.java

支持异步同步访问网络数据, 断点下载文件。

2.HttpRequest.java

网络请求的包装类。 包括url, 访问请求方法, 参数&#;等。

3.RequestCallBack.java

完成数据请求回调接口。

4.HttpHandler.java

获取网络数据逻辑的实现。这里可以理解为系统内部AsyncTask。访问网络数据处理流程图

5.HttpCache.java

网络数据的缓存,内部包含LruMemoryCache。在获取数据的时候会判断是否过期。

6.StringDownLoadHandler.java

handleEntity()将网络io流转化为String。

7.FileDownLoadHandler.java

handleEntity()将网络io流转化为File。

8.HttpException.java

统一异常

2.4 Bitmap模块2.4.1 总体设计

2.4.2 流程图

请查看http模块

2.4.3 类图

1.BitmapUtils.java

图片的异步加载,支持本地和网络图片, 图片的压缩处理, 图片的内存缓存已经本地缓存。

设置图片流程图

详细流程图

2.BitmapLoadTask.java

加载图片的异步任务。在doInBackground中读取图片资源

3.BitmapCache.java(1)主要函数4.BitmapGlobalConfig.java

配置, 包括线程池, 缓存的大小。

5.BitmapDisplayConfig.java6.DefaultDownloader.java

获取bitmap, 支持三种获取路径, 本地文件,资产文件, 和网络图片。

7.DefaultBitmapLoadCallBack.java

图片加载完成的的回调, 默认回调将获取的bitmap&#;传递给view。

3. 杂谈

和Volley框架相比

相同点:1.采用了网络数据缓存机制。2.通过handler进行线程通信不同点:Volley的Http请求在 android 2.3 版本之前是通过HttpClient ,在之后的版本是通过URLHttpConnection。xUtils都是通过HttpClient请求网络(bitmap模块图片下载是通过URLHttpConnection)。 URLHttpConnection默认支持GZIP压缩,api操作简单。2.Volley将Http请求数据先缓存进byte[], 然后是分配给不同的请求转化为需要的&#;式。xUtils是直接转化为想要的&#;式。 Volley:扩展性好, 但是不能存在大数据请求,否则就OOM。xUtils:不缓存入byte[] 支持大数据的请求, 速度比Volley稍快,但扩展性就低。4.Volley访问网络数据时直接开启固定个数线程访问网络, 在run方法中执行死循环, 阻塞等待请求队列。 xUtils是开启线程池来管理线程。缓存失效策略, volley的所有网络数据支持从http响应头中控制是否缓存和读取缓存失效时间,每个请求可以控制是否缓存和缓存失效时间。 Xutils网络数据请求是统一自定义缓存失效时间。

掌握Activity 的生命周期(Lifecycle) Activity的生命周期(Lifecycle)在用户与App进行交互,开启APP,退出APP,按Home键回到桌面等等的时候,相关的Activity实例将会不断的切换Activity生命周期中

android开发之单点触摸 相对于多点触摸,单点触摸还是很简单的。新建一个工程,先看看布局文件:RelativeLayoutxmlns:android="

Android 添加数据到本地Excel表中 由于项目需要,今天学习了一下如何将程序里的数据添加到本地的Excel表中。下面为学习笔记:先上效果图:首先,需要导入jxl.jar包到libs文件夹内。然后

标签: 开源项目怎么做

本文链接地址:https://www.jiuchutong.com/biancheng/382243.html 转载请保留说明!

上一篇:Android属性动画完全解析(上),初识属性动画的基本用法(android 属性动画原理)

下一篇:掌握Activity 的生命周期(Lifecycle)(activity的作用和生命周期)

  • 缴纳增值税账务处理
  • 定期定额征收的个体户怎么报个人所得税
  • 汇算清缴补交所得税会计分录小企业会计政策
  • 电子承兑汇票怎么做账
  • 财务费用最后怎么结转
  • 所得税纳税申报表在哪里打印
  • 城市规划部门收取的市政建设配套费是否作为契税的征税基数
  • 投资项目的资本金的认缴
  • 个人借款到期未还诉讼时效
  • 物业公司收小区物业费吗
  • 母子公司之间转让土地使用权
  • 我是小规模企业客户要求开专票不开投诉
  • 税款流失是什么意思
  • 商业承兑汇票贴现转让
  • 开票3个点13个点是什么意思
  • 新注册公司第一次怎么报税
  • 购买的技术服务费需要摊销吗
  • 固定资产装修费用计入房产税吗
  • 购货方收到代垫运费的发票怎么做会计分录?
  • 扶贫贷款主要指
  • 打包贷款和出口信贷的区别和联系
  • 把u盘变成光盘模式
  • 电子发票上的电子税章如何才能自动生成
  • 营业外支出的核算内容包括
  • 员工意外伤害保险范围
  • 一般纳税人开出普票可以抵扣吗
  • 预借差旅费报销会计分录
  • 新职工工资从什么时候起算
  • php实现的跟QQ和MSN类似的BICQ v2.0.0
  • win101903怎么查看
  • PHP:Memcached::getDelayedByKey()的用法_Memcached类
  • 企业存款利息收入增值税
  • 购销合同印花税税率2023
  • postman汉化包
  • Vue3通透教程【三】Vue3代码初体验找不同
  • 神经网络模型是干嘛的
  • 10年未被强制修复!黑客利用Windows旧漏洞攻击通信公司并分发恶意文件
  • python 虚拟环境
  • 政府会计公共基础设施分类
  • phpcms怎么用
  • 每个公司都要交房产税吗
  • 哪些行业不用缴纳增值税
  • 营业执照更换法人需要哪些手续
  • 借款可以抵货款吗
  • 企业管理费会计怎么做账
  • 企业税务分为哪几类
  • 权益法和成本法的适用范围
  • 一般纳税人购销合同印花税怎么算
  • 利润分配怎么分配比例
  • 完工产品成本计算表怎么填
  • 租赁费属于酌量性固定成本
  • 纳税人财务核算内容包括
  • 法定节假日报税顺延几天
  • 备查账依据什么登记
  • sql游标怎么用
  • sql ntext数据类型字符替换实现代码
  • mac app store打开一片空白
  • ubuntu20.04怎么样
  • 虚拟机怎么不能玩游戏
  • ubuntu20桌面
  • win10系统浏览器设置主页
  • 微软被告
  • u盘怎么安装win7镜像文件
  • msworks.exe - msworks是什么进程 有什么用
  • win10更新中重启会怎么样
  • 电脑开机显示windows不可用
  • linux查看rpm是否安装
  • win10如何更换
  • 深入linux内核架构与底层原理 pdf
  • linux shell脚本教程
  • shell脚本中获取参数
  • unity读取文本文件
  • 从零开始学什么好
  • canvas实例
  • python flask
  • 青岛市税务局内设机构
  • 物业费增值税税率5%
  • 预先支付货款
  • 护士的专业素质要求
  • 云南2021高考改革
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设