编程基础与事件状态 06:把任务与记录保存下来

课程首页 · 全部知识课程 · 返回专题主页

本系列第 6/8 课,建议 45–60 分钟(估算)。先完成上一课。

下载本课完成工程 .aia

这课解决什么

全局变量只活在当前运行中;TinyDB 保存标签和值。启动时读回记录和剩余,运行任务统一恢复成暂停,避免把离开应用期间算成专注。运行中每隔约五秒保存快照,暂停和完成立即保存。

先预测,再运行

导入这份 .aia 到另一个新工程,会带着你手机上的完成记录吗?

先记下自己的答案,运行起始工程与完成工程比较;答案见文末。

开始实战

以上一课完成工程为起点,先导入并运行,再另存为本课作业。

完成工程可以查看答案;独立作业请保留自己的修改。

新增或调整的组件

实例名 组件 本课配置
标签_标题 标签 Width=Fill parent;FontSize=24;TextColor=#183153;Text=专注学习 · 第 6课
微数据库1 微数据库 Namespace=FocusA06

逐步搭建

  1. 加入微数据库1,设置独立 Namespace;启动读取分钟、任务、剩余和记录,默认值保持正确类型。
  2. 创建保存过程,完成记录与设置写入 TinyDB;Timer 按快照差值减少不必要写入。
  3. 完成时先改状态,再增加记录,重复 Timer 不会重复完成。
  4. 运行后暂停并完全关闭 APK,再打开:应恢复暂停,记录和设置还在。未经暂停的突然退出最多回到最近约五秒的快照。

专注学习助手第6课运行状态布局预览

图来自本课最终工程执行积木后的状态,为 HTML 近似预览;不是手机截图。

核心积木与数据流

下面是本课完成工程中的核心代码,包含所需全局变量和过程。可在块图中追踪数值,再回到工程对照完整事件;合并到已有工程时,同名事件合并处理。

global 剩余 = 0
global 状态 = "待开始"
global 任务 = ""
global 完成数 = 0
global 任务分钟 = 0
global 休息分钟 = 5
global 记录 = []
global 阶段 = "专注"

procedure 刷新() {
标签_剩余.Text = join(floor(剩余 / 60), " 分 ", 剩余 % 60, " 秒")
标签_状态.Text = join(状态, " · ", 阶段, " · ", 任务)
标签_记录.Text = join("已完成 ", 完成数, " 项")
}

when Screen1.Initialize() {
文本输入框_分钟.Text = 微数据库1.GetValue("分钟", "25")
任务 = 微数据库1.GetValue("任务", "")
if 任务 != "" { 文本输入框_任务.Text = 任务 }
剩余 = 微数据库1.GetValue("剩余", 0)
休息分钟 = 微数据库1.GetValue("休息分钟", 5)
任务分钟 = 微数据库1.GetValue("任务分钟", 0)
记录 = 微数据库1.GetValue("记录", [])
完成数 = length(记录)
状态 = choose(剩余 > 0, "暂停", "待开始")
刷新()
}

中途检查与排错

本课以下控制与数据流已执行最终归档中的真实积木检查。请在伴侣或安装的 APK 中按相同场景操作,记录实际结果;自动检查通过不代表手机已实测。

  1. 拒绝空任务。
  2. 非数字、非正数、上限、小数拒绝。
  3. 2分钟等于120秒。
  4. 延迟回调按实际时间计算。
  5. 运行中重复开始不重置。
  6. 重启读取设置、记录和暂停快照。
  7. 暂停期间不扣时。
  8. 完成记录持久化。
  9. 到期与重复计时回调。

排查时先确定出错的是输入、状态、数据读取还是显示;用标签暂时显示关键值,每次只改变一个条件。

计时器用于前台刷新;重启恢复暂停快照,可能回退约五秒。系统时间被修改会影响截止计算,不能用本项目承诺可靠的系统闹钟。

两个理解题与独立改造

  1. 导入这份 .aia 到另一个新工程,会带着你手机上的完成记录吗?
  2. TinyDB 的默认值为什么不能全部写空文本?

独立改造: 增加清空记录功能,清空前必须确认,但保留设置。

先完成自己的工程,再对照答案。检查成功路径,也检查空数据、重复操作和取消;写出你改动的规则。

查看预测与练习参考答案

预测: 不会。.aia 包含界面、积木和资源,不包含设备上的 TinyDB 现场数据。不同课程工程独立保存。

追踪: 取回列表、数字、文本要符合后续操作,空文本不能当作空列表。

改造思路: 确认后只清记录列表并保存;不要 ClearAll,否则会连任务和时长一起删掉。取消确认保持原数据。

完成与下一步

保存自己的工程并导出 .aia;给文件命名以区分本课作业和参考源码。请用自己的话解释本课知识,并展示一次失败输入的处理。

上一课 · 下一课:同一屏幕组织专注、统计和设置

文档反馈