BasePedo 数据持久化指南:LiteOrm 存储每日步数与跨天清零的实现
【免费下载链接】BasePedoandroid计步功能初探项目地址: https://gitcode.com/gh_mirrors/ba/BasePedo
BasePedo 是一款开源的 Android 计步器应用,本文是一份面向新手的BasePedo 数据持久化指南,重点讲解它如何借助LiteOrm 数据库框架完成每日步数存储,以及如何优雅地实现跨天清零,让你的计步数据"当天清零、次日重来",且关机重启不丢失。全文不涉及复杂理论,跟着步骤就能看懂。
为什么要给计步器做数据持久化?📱
计步器如果只在内存里累加步数,一旦锁屏被杀进程、重启手机,当天的步数就全部归零了。BasePedo 的做法是:把步数按日期写入本地数据库,每次启动时先读库恢复"今日步数",再继续累加。这就是数据持久化的核心价值——数据不丢、跨天清零、稳定可靠。
BasePedo 选用的持久化方案是LiteOrm(对应库文件为 lite-orm-1.7.0.jar),它是一款轻量级 Android ORM 框架,只需在实体类上加注解,就能自动完成建表、增删改查,非常适合新手快速上手。
第一步:设计每日步数数据表 StepData
数据持久化的前提是先定义"存什么"。BasePedo 在 StepData.kt 中定义了一张step表,结构极其精简,只有三个字段:
- id:自增主键,每条记录的唯一标识
- today:日期字符串(格式
yyyy-MM-dd),用来区分是哪一天的步数 - step:当日累计步数
通过@Table("step")、@PrimaryKey、@Column等注解,LiteOrm 就能自动完成建表与字段映射,无需手写 SQL,这就是 ORM 框架最省心的地方。
第二步:封装 LiteOrm 数据库工具类 DbUtils
为了让增删改查更统一,BasePedo 把数据库操作集中封装在 DbUtils.kt 中,提供了几个常用方法:
createDb():创建数据库,本例库名为basepedo.dbinsert()/insertAll():插入单条或批量步数记录getQueryAll():查询全部记录getQueryByWhere():按条件查询,例如按日期查当天步数update():更新已有记录(今天的新步数覆盖旧值)deleteAll():清空整表
这套封装让业务代码无需关心 SQL 细节,直接调用即可,也方便后续扩展分页查询等能力。
第三步:实现每日步数存储与恢复的核心流程
核心逻辑都在 StepService.kt 中,持久化主要围绕两个方法展开:
① 启动时恢复今日步数(initTodayData)每次服务启动,先用当天的日期去数据库查询记录:
- 查不到记录:说明今天是新的一天,步数从 0 开始
- 查到一条记录:把库里存的步数恢复到内存,界面继续累加
② 定时/事件触发保存(save)保存时同样先按日期查询:
- 不存在则新增一条记录(
insert) - 已存在则更新步数(
update,使用冲突替换策略)
这样"查询—新增或更新"的组合,保证了每天在表中只保留一条记录,避免重复数据。
第四步:定时保存机制,让数据始终最新 ⏱️
步数一直在变,不能每次都实时写库(太耗电),BasePedo 采用定时批量保存策略:
- 默认每 30 秒保存一次当前步数
- 屏幕锁屏后,为了省电改为每 60 秒保存一次
对应代码在 CountDownTimer.kt 封装的倒计时器配合 StepService.kt 中的TimeCount实现,计时结束即调用save()落库,然后开启下一轮计时,循环往复。
第五步:跨天清零的实现技巧 🌙
这是本指南的重点。跨天清零不能简单地在"步数很大时清零",因为用户可能两天不打开 App。BasePedo 的巧妙做法是监听系统日期变更广播:
在 StepService.kt 的广播接收器中注册了Intent.ACTION_DATE_CHANGED,一旦收到该广播(说明日期已切换):
- 重新执行
initTodayData():用新日期去查库,新的一天自然查不到记录,步数恢复为 0 - 调用
clearStepData()把内存计数归零 - 重新开始计步
整个过程无需判断"昨天是多少步",只需把日期作为数据的唯一维度,跨天清零问题就迎刃而解。这正是"以日期为键"设计的高明之处。
第六步:关机、锁屏、弹窗等关键节点也不丢数据 🔒
除了定时保存,BasePedo 还在以下关键时刻主动落库,进一步保障数据安全:
- 屏幕解锁时保存一次(
ACTION_USER_PRESENT) - 系统弹出关机对话框时保存一次(
ACTION_CLOSE_SYSTEM_DIALOGS) - 关机广播到来时保存一次(
ACTION_SHUTDOWN) - 服务被销毁时通过 AndroidManifest.xml 中配置的
BOOT_COMPLETED等广播自动重启,重启后再从数据库恢复步数
总结:三步看懂 BasePedo 的持久化设计 ✅
回顾整个实现,BasePedo 的数据持久化可以浓缩为三句话:
- 一张表:用 StepData.kt 以"日期 + 步数"存储每日数据
- 一个工具类:用 DbUtils.kt 封装 LiteOrm 的增删改查
- 一套保存策略:定时保存 + 关键事件保存,配合日期变更广播实现跨天清零
这套设计虽然代码不多,却覆盖了计步器最核心的数据可靠性需求,非常适合作为 Android 计步器开发的入门参考。如果你也想做自己的计步 App,不妨直接克隆这个项目,从数据持久化部分开始读起,很快就能上手!
【免费下载链接】BasePedoandroid计步功能初探项目地址: https://gitcode.com/gh_mirrors/ba/BasePedo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考