本系列第 8/8 课,建议 45–60 分钟(估算)。先完成上一课。
这课解决什么
毕业项目把前七课连起来:专注完成记一次记录,进入休息,休息到期结束;取消不记完成。启动冻结专注和休息参数,用户修改下一轮设置不会改变当前轮。
先预测,再运行
专注完成后进入休息,休息到期会再增加一次完成记录吗?
先记下自己的答案,运行起始工程与完成工程比较;答案见文末。
开始实战
以上一课完成工程为起点,先导入并运行,再另存为本课作业。
完成工程可以查看答案;独立作业请保留自己的修改。
新增或调整的组件
| 实例名 | 组件 | 本课配置 |
|---|---|---|
标签_标题 |
标签 | Width=Fill parent;FontSize=24;TextColor=#183153;Text=专注学习 · 第 8课 |
垂直布局_专注 |
垂直布局 | Width=Fill parent;Visible=True |
按钮_取消 |
按钮 | Width=Fill parent;BackgroundColor=#2563EB;TextColor=#FFFFFF;FontSize=16;Text=取消 |
垂直布局_设置 |
垂直布局 | Width=Fill parent;Visible=False |
文本输入框_休息 |
文本输入框 | Hint=完成后休息 1–30 分钟;Width=Fill parent;FontSize=16;Text=5 |
微数据库1 |
微数据库 | Namespace=FocusA08 |
逐步搭建
- 增加取消按钮和休息分钟设置,约定休息为 1–30 的整数。
- 开始保存当前专注分钟与休息分钟;专注到期先记录,再把阶段改为休息并设置新截止。
- 取消关闭计时器、清除剩余、回到专注待开始并立即保存。
- 完整检查空输入、重复操作、暂停、跨页、重启、专注→休息→完成;记录通过与失败的步骤。

图来自本课最终工程执行积木后的状态,为 HTML 近似预览;不是手机截图。
核心积木与数据流
下面是本课完成工程中的核心代码,包含所需全局变量和过程。可在块图中追踪数值,再回到工程对照完整事件;合并到已有工程时,同名事件合并处理。
global 剩余 = 0
global 截止 = 0
global 状态 = "待开始"
global 任务 = ""
global 完成数 = 0
global 任务分钟 = 0
global 休息分钟 = 5
global 上次保存 = 0
global 记录 = []
global 阶段 = "专注"
procedure 刷新() {
标签_剩余.Text = join(floor(剩余 / 60), " 分 ", 剩余 % 60, " 秒")
标签_状态.Text = join(状态, " · ", 阶段, " · ", 任务)
标签_记录.Text = join("已完成 ", 完成数, " 项")
}
procedure 保存() {
上次保存 = 剩余
微数据库1.StoreValue("休息分钟", 休息分钟)
微数据库1.StoreValue("任务分钟", 任务分钟)
微数据库1.StoreValue("分钟", 文本输入框_分钟.Text)
微数据库1.StoreValue("任务", 任务)
微数据库1.StoreValue("剩余", 剩余)
微数据库1.StoreValue("记录", 记录)
微数据库1.StoreValue("休息", 文本输入框_休息.Text)
微数据库1.StoreValue("阶段", 阶段)
}
when 计时器1.Timer() {
if 状态 = "运行" {
剩余 = max(0, ceil((截止 - 计时器1.SystemTime()) / 1000))
if 剩余 = 0 {
状态 = "完成"
计时器1.TimerEnabled = false
if 阶段 = "专注" { 完成数 = 完成数 + 1
listadd(记录, join(任务, " · ", 任务分钟, " 分钟")) }
if 阶段 = "专注" { 阶段 = "休息"
剩余 = 休息分钟 * 60
截止 = 计时器1.SystemTime() + 剩余 * 1000
状态 = "运行"
计时器1.TimerEnabled = true }
}
if abs(剩余 - 上次保存) >= 5 or 剩余 = 0 or 状态 = "完成" { 保存() }
刷新()
}
}
中途检查与排错
本课以下控制与数据流已执行最终归档中的真实积木检查。请在伴侣或安装的 APK 中按相同场景操作,记录实际结果;自动检查通过不代表手机已实测。
- 拒绝空任务。
- 非数字、非正数、上限、小数拒绝。
- 2分钟等于120秒。
- 延迟回调按实际时间计算。
- 运行中重复开始不重置。
- 重启读取设置、记录和暂停快照。
- 暂停期间不扣时。
- 切页不重启任务。
- 运行参数冻结、修改输入不改变当前任务。
- 完成记录持久化。
- 专注后休息、休息不重复完成、取消不记完成。
- 到期与重复计时回调。
排查时先确定出错的是输入、状态、数据读取还是显示;用标签暂时显示关键值,每次只改变一个条件。
计时器用于前台刷新;重启恢复暂停快照,可能回退约五秒。系统时间被修改会影响截止计算,不能用本项目承诺可靠的系统闹钟。
两个理解题与独立改造
- 专注完成后进入休息,休息到期会再增加一次完成记录吗?
- 保存设置与冻结本轮参数解决的是两个不同问题吗?
独立改造: 把两阶段改成训练/恢复,增加总轮数并独立画出状态图。
先完成自己的工程,再对照答案。检查成功路径,也检查空数据、重复操作和取消;写出你改动的规则。
查看预测与练习参考答案
预测: 不会。只有阶段为专注时才记录,休息结束只是完成休息阶段。
追踪: 保存用于重启恢复,冻结防止编辑下一轮参数影响当前轮。
改造思路: 新增轮次变量,只在恢复结束后判断是否继续;每个训练完成只记一次。先列转换表,再修改业务事件,最后更新显示。
完成与下一步
保存自己的工程并导出 .aia;给文件命名以区分本课作业和参考源码。请用自己的话解释本课知识,并展示一次失败输入的处理。
扫码添加客服咨询