资讯动态

Super Productivity 休息提醒(Break Reminders)完全指南:触发逻辑、源码原理与配置实战

发布时间:2026/9/13 3:07:13 来源:尧图企业网站定制
Super Productivity 休息提醒Break Reminders完全指南触发逻辑、源码原理与配置实战【免费下载链接】super-productivitySuper Productivity is an advanced todo list app with integrated Timeboxing and time tracking capabilities. It also comes with integrations for Jira, GitLab, GitHub and Open Project.项目地址: https://gitcode.com/GitHub_Trending/su/super-productivitySuper Productivity 的休息提醒Break Reminder功能会在你连续工作超过设定时长、中间没有任何休息时主动提示你起身离开电脑。它与真实的时间跟踪Time Tracking绑定——只有任务正在被跟踪的时间才会计入阈值因此反映的是真实的净工作时间而非简单的挂钟计时。阅读本文后你将掌握休息提醒的完整触发条件、无休息工作时间的累计与重置机制、全部配置项与默认值以及锁屏/全屏拦截器等桌面端强化手段的底层实现原理。休息提醒用于解释何时时间被记录可参见如何记录时间Focus Mode 内置的番茄钟休息参见计时器与专注模式全部设置项位于设置与偏好。什么条件下会触发休息提醒休息提醒是所有条件同时满足时才显示的与逻辑缺一不可。在源码中这一判断由TakeABreakService._triggerBanner$完成见 take-a-break.service.ts功能已开启—— 设置中isTakeABreakEnabled为真否则整个提醒流程直接短路。超过最小工作时间—— 连续无休息工作时间见下文大于配置的takeABreakMinWorkingTime。文档默认是 60 分钟源码中该值来自duration类型的配置项如果你习惯长时间深度工作可以放宽到 2 小时。未被 snooze—— 最近没有点过稍后提醒snooze一旦 snooze提醒在takeABreakSnoozeTime默认 15 分钟内保持隐藏。没有空闲弹窗—— 空闲idle对话框没有打开。对应源码中的(!isIdle || !cfg.idle.isEnableIdleTimeTracking)判断避免两个打断弹窗同时叠加出现。条件满足后应用显示一个横幅banner并且可选地触发桌面通知、声音或更强的强制措施见下文。横幅会周期性刷新源码中PING_UPDATE_BANNER_INTERVAL 60 * 1000即每分钟一次来反映你已经连续工作了多久桌面通知也做了节流DESKTOP_NOTIFICATION_THROTTLE 60 * 1000每分钟至多一条避免通知轰炸造成通知疲劳。值得注意的实现细节_triggerBanner$用throttleTime(PING_UPDATE_BANNER_INTERVAL)限流而锁屏/全屏拦截器故意不加节流靠distinctUntilChanged()保证只在状态翻转时触发——防止在休息结束时出现过期横幅。无休息工作时间是如何计数的这是休息提醒最核心、也最容易误解的机制。TakeABreakService内部维护了一个timeWorkingWithoutABreak$流用scan累加器持续累计无休息工作时间take-a-break.service.ts。什么会计入计时只有任务正在被跟踪的 tick才会累加源码中_tick$对每个跟踪 tick 先filter(() !!this._taskService.currentTaskId())即当前没有活动任务时的 tick 被直接过滤掉。某些流程中手动加入的工作时间也会计入通过otherNoBreakTIme$手动注入。空闲idle时间段被跟踪到任务上的时间不会计入对应 issue #9352 的修复测试用例见 take-a-break.service.spec.ts。也就是说应用开着但没有任何任务在计时属于被动时间不累计。提醒完全由真实被跟踪的工作量驱动而不是一个简单的墙钟计时器。计时器何时归零reset计时器在以下情况下被重置为 0然后从零重新开始累计把时间标记为休息break—— 例如在空闲对话框把空闲时间归类为休息或通过其他方式记录一次休息。系统据此认为你已经休息过了重新开始计数。点击Already Did已经休息过了—— 告诉应用你其实已经休息过。计时器重置并且应用会在你的休息时间指标里记入一小段休息时间约 5 分钟鼓励你真的起身休息而不是仅仅点掉提醒。长时间没有活动任务—— 如果关闭了空闲跟踪在没有任何任务被跟踪一段时间约 10 分钟对应源码常量BREAK_TRIGGER_DURATION 10 * 60 * 1000后计时器自动重置默认你可能已经离开了电脑。空闲时间被计为休息—— 如果开启了空闲检测从空闲状态返回并把该段时间归为休息时计时器立即归零避免你刚休息完又被立刻提醒。在源码层面所有归零路径最终都汇入_triggerReset$take-a-break.service.ts它既清零计数器也负责拆除提醒关闭横幅、解除锁屏/全屏拦截状态。该服务刻意把归零与提醒拆除绑在一起——历史上空闲对话框和 Focus Mode 休息绕过该路径曾导致横幅残留、锁屏/全屏拦截状态永久锁死见 issue #9305相关回归测试在 take-a-break.service.spec.ts。一个重要的边界细节零值与负值 tick源码注释特别强调只有_triggerReset$才被允许把计数器归零。来自跟踪流的 tick 若出现0或负值例如 Android 端焦点会话到期时会传入cap 0的唤醒 tick或系统时钟回拨导致 tick 为负都会被filter((duration) duration 0)直接丢弃绝不会经由 tick 分支把计数器清零——否则横幅会声称你已经工作了数小时而计数器实际是 0。相关测试见 take-a-break.service.spec.ts。休息提醒的间隔如何配置有两个核心时间间隔可以在设置 UIduration 输入框中配置对应的配置模型TakeABreakConfig定义在 global-config.model.ts表单配置在 take-a-break-form.const.ts配置键含义默认行为takeABreakMinWorkingTime首次提醒出现前必须连续工作有任务被跟踪的最短时长通常为 1 小时可加大以支持长专注块也可减小以获得更频繁的提醒takeABreakSnoozeTimesnooze 后提醒保持隐藏的时长通常为 15 分钟到期后若仍未休息提醒会再次出现takeABreakMessage提醒文案支持${duration}占位符源码中_createMessage()用msToString(duration)替换${duration}即已无休息工作多久take-a-break.service.tsmotivationalImgs可选激励图片Web URL 列表横幅与全屏拦截器会随机挑选一张展示见Math.floor(Math.random() * ...)随机选择逻辑英文界面的完整帮助文本见 en.json这样描述功能允许你在连续工作指定时长、中间没有休息时配置一个周期性提醒。你可以修改显示的消息${duration}会被替换为无休息时长。 其余设置项还包括isLockScreen到点锁屏、isTimedFullScreenBlocker全屏窗口展示消息、timedFullScreenBlockerDuration全屏窗口显示时长与isFocusWindow提醒激活时聚焦应用窗口后三项均标注desktop only。为什么休息被显式支持应用默认消息点明了设计初衷你已经连续工作了相当长的时间而没有休息起身走动一下比如散个步有助于长期生产力。休息提醒的存在理由包括认知疲劳是非线性的—— 人们往往意识不到自己效率开始下降一个提醒能起到作用。自愿休息很容易被跳过—— 专注时再做完这一件小事可能无限延长提醒创造了清晰的边界。身体健康—— 久坐和长时间盯屏幕需要规律性打断应用无法强制你但可以提醒。未来与当下的权衡—— 休息的收益有一部分在未来健康、持续表现提醒让这种取舍变得可见。该设计是非惩罚性的你可以 snooze也可以用Already Did直接确认。需要更强边界感的用户可以在桌面端Electron使用升级选项锁屏和全屏拦截器可配置时长。你可以自由选择提醒强度——从温和的横幅到强制暂停。桌面端强制手段的底层实现锁屏Lock ScreenElectron 端收到window.ea.lockScreen()调用后会按平台执行系统锁屏命令lockscreen.tsmacOS 使用CGSession -suspendBig Sur 后的回退方案是模拟CtrlCmdQ快捷键Windows 使用rundll32.exe user32.dll, LockWorkStationLinux 则依次尝试gnome-screensaver-command、dm-tool或qdbus。全屏拦截器Fullscreen Blocker由 full-screen-blocker.ts 实现会创建一个fullscreen: true, alwaysOnTop: true, skipTaskbar: true的无边框全屏窗口加载break-reminder-overlay.html页面通过 URL hash 传入消息、随机激励图片和timedFullScreenBlockerDuration时长在时长结束前窗口不可关闭close事件被preventDefault拦截时长到后才允许关闭。窗口创建还显式设置了contextIsolation、关闭nodeIntegration确保覆盖层保持安全默认值。从源码看锁屏与全屏拦截在触发后还有30 秒延迟LOCK_SCREEN_DELAY与FULLSCREEN_BLOCKER_DELAY均为30 * 1000给用户一个短暂的缓冲窗口。休息提醒如何支持长会话与可持续性休息提醒通过以下方式支持可持续的长工作会话跨整日累积工作时间—— 计时器跨多个工作块累积不会在中午或会话边界自动清零除非满足上述重置条件之一。可配置阈值—— 可以把最小工作时间设得更长如 2 小时避免深度工作块过早被打断。尊重自主性—— snooze 与Already Did让你自己决定何时休息同时把提醒留在意识中。休息时间指标—— 当你确认休息如点击Already Did时应用会记录休息时间让你看到自己确实离开了工位Already Did附赠的 5 分钟休息信用是一种激励鼓励你真正起身做短暂休息而不是仅仅点掉提醒。因此休息提醒既是安全网防止连续数小时无暂停也是一个可以按个人节奏调校的可配置工具。权衡不被打断的专注 vs 强制休息应用在保护专注与鼓励休息之间保持平衡为保护专注空闲对话框打开时不显示提醒避免双重打断。桌面通知被节流避免刷屏。snooze允许你在关键时刻推迟。可配置的最小工作时间允许为深度工作设置更长间隔。为强制休息可选仅桌面端锁屏—— 应用可以锁住屏幕直到你确认。全屏拦截器—— 持续一段设定时长的全屏覆盖层。窗口聚焦—— 把应用带到前台确保你看到提醒。声音—— 可以穿透注意力的提示音配置键breakReminderSound来自应用音效设置。你可以在设置中选择平衡点从柔和横幅到硬性停止。休息提醒与 Focus Mode 的关系休息提醒和Focus Mode如番茄钟是两套独立系统可以同时运行休息提醒基于整日累积的工作时间来自任务跟踪。按可配置间隔如 1 小时触发。强调身体健康与可持续生产力。始终可以 snooze 或关闭是可打断的。Focus Mode 休息是番茄钟循环的一部分如 25 分钟工作、5 分钟休息、每 4 个循环一次长休息。有自动的会话/休息切换。如果启用相关选项可以在休息期间暂停任务跟踪。休息可以按设置自动或手动开始。默认情况下Focus Mode 的休息不会重置休息提醒的计时器。也就是说如果你做了一次番茄钟休息休息提醒的无休息工作时间计数器会继续从那次休息之前的位置累加——除非你也把该时段标记为休息意义上的休息例如通过空闲对话框或Already Did。如果你希望番茄钟休息也算作提醒意义上的真休息可以在番茄钟休息后使用Already Did或者在离开时把空闲时间记为休息。两套系统共同支持结构化工作Focus Mode以及在没有 Focus Mode、或超出单个番茄钟块时的安全网。与空闲检测的集成如果空闲检测已启用并且你返回时把空闲时间归为休息休息提醒的计时器就会重置。这避免了刚离开且该时段已被计为休息后立刻又被提醒休息。对应源码中的_triggerIdleDialogReset$它监听idleDialogResultaction当isResetBreakTimer为真时触发归零take-a-break.service.ts。空闲检测与重新分配对话框的工作方式参见空闲时间。值得一提的细节空闲对话框中的重置复选框默认勾选当一次休息被跟踪时自动默认勾选因此用户主动取消勾选即表示明确选择不重置计时器。空闲对话框的结果本身不会喂给计数器issue #9352归零完全由重置开关驱动。相关的边角行为——例如未跟踪的空闲时段重置优先于用户在对话框中显式取消重置——在测试中有详细刻画take-a-break.service.spec.ts。小结休息提醒在功能开启、被跟踪的工作时间超过最小值、未 snooze、且空闲对话框未打开时触发。只有任务被跟踪的时间以及某些手动工作时间会计入当你休息或确认休息或关闭空闲跟踪后长时间无任务时计时器重置。可配置最小工作时间与snooze 时长可自定义消息支持${duration}占位符并添加激励图片。该功能的存在是为了支持可持续生产力与健康可选的锁屏与全屏拦截器仅桌面端提供更强的强制手段。休息提醒独立于 Focus Mode两者可以同时运行你也可以调整它们的交互程度例如在 Focus Mode 休息后使用Already Did。相关文档如何记录时间 —— 任务时间跟踪如何工作休息提醒计入这段时间计时器与专注模式 —— Focus Mode 休息 vs 休息提醒空闲时间 —— 把空闲时间归为休息如何重置休息提醒计时器设置与偏好 —— 启用/禁用、最小时间、snooze、消息、锁屏、全屏拦截器【免费下载链接】super-productivitySuper Productivity is an advanced todo list app with integrated Timeboxing and time tracking capabilities. It also comes with integrations for Jira, GitLab, GitHub and Open Project.项目地址: https://gitcode.com/GitHub_Trending/su/super-productivity创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价