K4.06.3complication refresh versus battery设计
更新频率受续航约束
别名: 复杂功能刷新 · 表盘更新预算 · complication budget
概念解释
复杂功能每一次改写屏幕上的数,都要唤醒处理、可能拉一次网络或问一次手机,电量按次扣。表盘几乎每次抬腕都在,刷新频率因此被续航预算卡住:天气从「每分钟」改成「每十五分钟」,圆环从「实时」改成「阶段跳变」,不是产品懒,是这块小电池养不起一块永远在刷的表盘。这条只谈槽位内容的刷新节奏,不谈整机常亮策略,也不谈后台同步整条管道该多勤——那些是另一层的电池账。
机制
表盘是常驻前台。一次槽位更新的成本看起来很小,乘上每天几百次抬腕和系统为了「看起来是活的」而做的预刷新,就会变成收音机式的底噪耗电。系统于是给每个槽一份时间线预算:在哪些时刻允许改值,超过就排队或丢。应用若按手机端的实时习惯去推(股价每秒、公交每十秒),预算很快用完,后续更新被静默丢掉,槽上的数变成错的且没有标记。人看见的是「表盘撒谎」,不是「预算用尽」。刷新还要和抬腕对齐才有意义:人没在看的时候把数改对,对本次瞥视零贡献,却照样扣电。有效的刷新是赶在下一次抬腕之前把将要被问的那个槽改对,而不是让所有槽都尽量新。
边界
导航转向、心率告警这种安全相关的槽,延迟的代价高于一点电,刷新可以暂时顶破预算,但必须是暂时,活动结束要还回去。离线或手机不在身边时,刷新管道断了,槽应标成「不是现在」,而不是继续显示一个看起来很新的旧值。装饰性秒针、动态表盘背景若也算「更新」,会把槽位预算一起吃掉;那是表盘渲染的开销,应与槽位数据刷新分开记账,不能都怪复杂功能。用户选择的「始终显示秒」是明确用续航换动效,槽位刷新不应悄悄跟到同一频率。
怎么落地
- 按问题的变化速度给每个槽定刷新:时钟走秒、公交按到站窗口、天气按小时、日历按事件边界。禁止所有槽共用同一个「尽量实时」。
- 把更新排在预期抬腕之前:早高峰前刷公交,开会前刷下一场,而不是均匀撒点。
- 预算用尽或管道断开时,槽要看得出是旧的(变淡、去掉精确到分的部分),不要若无其事地显示最后一次成功值。
- 验证:记录每个槽的实际刷新间隔、失败次数,以及对应时段的电池曲线。把某槽从「每分钟」降到与问题匹配的间隔,若撒谎投诉下降而全天续航回升,说明原先在用刷新频率冒充新鲜,而不是在服务瞥视。