news 2026/8/19 17:43:24

BasePedo 数据持久化指南:LiteOrm 存储每日步数与跨天清零的实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BasePedo 数据持久化指南:LiteOrm 存储每日步数与跨天清零的实现

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.db
  • insert()/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,一旦收到该广播(说明日期已切换):

  1. 重新执行initTodayData():用新日期去查库,新的一天自然查不到记录,步数恢复为 0
  2. 调用clearStepData()把内存计数归零
  3. 重新开始计步

整个过程无需判断"昨天是多少步",只需把日期作为数据的唯一维度,跨天清零问题就迎刃而解。这正是"以日期为键"设计的高明之处。

第六步:关机、锁屏、弹窗等关键节点也不丢数据 🔒

除了定时保存,BasePedo 还在以下关键时刻主动落库,进一步保障数据安全:

  • 屏幕解锁时保存一次(ACTION_USER_PRESENT
  • 系统弹出关机对话框时保存一次(ACTION_CLOSE_SYSTEM_DIALOGS
  • 关机广播到来时保存一次(ACTION_SHUTDOWN
  • 服务被销毁时通过 AndroidManifest.xml 中配置的BOOT_COMPLETED等广播自动重启,重启后再从数据库恢复步数

总结:三步看懂 BasePedo 的持久化设计 ✅

回顾整个实现,BasePedo 的数据持久化可以浓缩为三句话:

  1. 一张表:用 StepData.kt 以"日期 + 步数"存储每日数据
  2. 一个工具类:用 DbUtils.kt 封装 LiteOrm 的增删改查
  3. 一套保存策略:定时保存 + 关键事件保存,配合日期变更广播实现跨天清零

这套设计虽然代码不多,却覆盖了计步器最核心的数据可靠性需求,非常适合作为 Android 计步器开发的入门参考。如果你也想做自己的计步 App,不妨直接克隆这个项目,从数据持久化部分开始读起,很快就能上手!

【免费下载链接】BasePedoandroid计步功能初探项目地址: https://gitcode.com/gh_mirrors/ba/BasePedo

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 17:35:43

不写一句语音识别代码,用 litellm 跑通实时语音对话

不写一句语音识别代码,用 litellm 跑通实时语音对话 【免费下载链接】litellm The fastest, litest AI Gateway. Rust core with Python SDK. Call 100 LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedro…

作者头像 李华
网站建设 2026/8/19 17:28:20

一劳永逸的U盘启动盘:Ventoy插件配置从入门到实战

一劳永逸的U盘启动盘:Ventoy插件配置从入门到实战 【免费下载链接】Ventoy A new bootable USB solution. 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy 还在为装系统反复折腾U盘?传统启动盘工具往往做一次格式化一次,换…

作者头像 李华
网站建设 2026/8/19 17:20:59

如何为 Noctis 贡献代码:开源 VSCode 主题项目的完整协作指南

如何为 Noctis 贡献代码:开源 VSCode 主题项目的完整协作指南 【免费下载链接】noctis Noctis is a collection of light & dark themes with a well balanced blend of warm and cold colors 项目地址: https://gitcode.com/gh_mirrors/no/noctis 为 No…

作者头像 李华