Files
FamilyBook_harmonyos/entry
laoyang b0e12f14fe 首页/日程页:当前时间红线改为定时器驱动,不再冻结在冷启动时刻 (#81)
用户:首页今天的日程,那个红线,不会动态更新,只有刚打开应用的时候更新,
如果不清后台,就一直不动了。查一下这个更新机制,需要能够动态更新。

根因:nowMin: this.nowMinutes() 是**在 build 里直接调方法** ——
ArkUI 不会因为时间流逝重算任何东西,那个方法只在首次 build 时求值一次,
红线永远停在打开 App 那一刻。与 pitfalls 里 ForEach(this.xxx(), ...) 追踪不到
是同一条规则:build 里只有字段(@Local/@Param)建依赖,方法调用不建。

改法:@Local nowClockMin + setInterval 30 秒一跳改它;传参改成读该字段。
- 30 秒而非 1 分钟:1 分钟在整分附近显得迟一拍,30 秒只改一个 number,成本极低;
- 先立即刷一次,否则首屏红线停在默认 0(=00:00,跑到视窗外面);
- aboutToAppear 起、aboutToDisappear 停 —— 首页切模块走 if/else 分发,
  组件会销毁重建,成对钩子必然触发;
- 绝不在 build() 里起定时器(build 可能多次调用,定时器会越叠越多)。

顺带修 FbCalendarPage 完全相同的两处(月视图 + 议程视图)——
用户从首页切过去看到同样的死线。

验证(真机 5NC0225B27004718,红线 #FF3B30 像素扫描):
09:57:22 红线 y=1359.0,10:00:24 y=1366.5(下移 7.5px,
理论 3.03 分钟 = 6.9px,吻合);
切到别的模块再切回后仍在走:1368.5 → 90 秒后 1372.5(4px≈1.75 分钟,吻合),
说明 aboutToDisappear 清掉旧定时器、aboutToAppear 起了新的,无泄漏无停摆。
hvigorw assembleHap BUILD SUCCESSFUL。
2026-11-06 10:02:45 +08:00
..