TECHNICAL DOCUMENT

关于计时, 我们想跟你说句老实话

“我明明设了 30 分钟, 怎么感觉孩子多玩了几分钟?” 如果你也这么想过, 这篇给你一个不藏着掖着的答案。先把话说明白:

你的疑问我们的老实话
能分秒不差吗不能, 省电冻结后台时会晚几分钟
会不会没到点就误锁设计上不会——我们让偏差往晚的方向走, 详见下文
到点了会不会漏锁不会, 到限额一定温柔挡住

这一篇是给家长看的诚实说明。 很多家长会问: “我设了一个时长, 小龟时光真的能掐得分秒不差吗?” 我们的答案是: 不能, 而且我们不打算假装能。这一篇讲清楚为什么, 以及我们守住的两条底线。

简单答案: 偶尔会”晚几分钟”, 通常不会”提前”

小龟时光运行在 Android 7.0 及以上的安卓手机上。而在安卓上,决定一个后台 App 什么时候被允许”思考”的,是操作系统,不是 App 自己。一句话就是全部原因。下面是具体机制,出处全部是安卓官方文档——因为”手机会杀后台”这种含糊说法,你本来就应该有办法去核对。

系统会把后台 App 直接冻住。 安卓从 Android 11 起支持”缓存应用冻结器”。当一个进程被冻结时,它的所有线程都会被挂起,在解冻之前无法执行任何 CPU 工作。在 Android 14 及以上,进入缓存状态的进程会在 10 秒后被冻结。“冻结”不是”变慢”,是停住。在这些时间段里,App 什么也数不了。

连”叫醒自己”的次数都是配给的。 设备闲置时,安卓的 Doze(低电耗模式)会把闹钟、任务和同步推迟到周期性的”维护窗口”里执行,其余时间挂起网络访问。而那两种专门设计来”能在 Doze 期间照常触发”的闹钟类型,官方文档明确写了上限:每个 App 每九分钟最多触发一次。而且设备闲置得越久,系统安排维护窗口的频率就越低

孩子越少用的 App,被掐得越紧。 安卓会按”最近多久用过、用得多不多”把 App 分进 App Standby Buckets(应用待机分组),分组越靠后限制越强。在限制最严的那一组里,一个 App 一天只被允许一个闹钟

厂商还会在这上面再加一层。 这一点常被说成”国产手机的毛病”,其实不准确。社区维护的项目 Don’t kill my app! 长期跟踪各家厂商的行为,目前把华为、小米、一加、三星、魅族列为最激进的一档,而以 AOSP 为基础的设备(如 Pixel)表现最好——三星和一加并不是国产品牌。需要说明:它是社区项目不是官方来源,请按这个分量看;但这个排序跟我们实测的感受一致。

所以真实情况是: 你设了一个时长, 偶尔会晚一点点才提醒。 比如你设的限额到了, 手机刚好把我们冻住了, 那”时间到”的温柔挡屏可能会比理论上的那一刻晚几分钟才出现。我们为此做了哪些对抗——这确实是一场硬仗——写在另一篇里。

我们守住的两条底线

虽然做不到分秒精准, 但有两件事我们从设计上就守死了:

第一条 — 设计上我们让偏差往”晚”的方向走。 我们宁可”晚一点点”, 也不去赌”可能已经到了”。如果某段时间没看清楚, 我们就当它没发生, 而不是瞎猜一个更大的数字提前把孩子挡住。对孩子来说, 被冤枉”明明还没到时间却被关了”是很委屈的事。

这是设计取向, 不是精度承诺。系统层面的意外没法百分之百排除, 所以我们的用户协议里写的是”可能有偏差、通常表现为延迟”, 而不是”绝不提前”——那种肯定式的精度声明, 只要出一次例外就站不住。

第二条 — 只要监控在正常运行, 到了限额就会挡住。 晚几分钟我们认, 但”该挡的时候漏掉”不是我们接受的行为。一旦确认孩子用够了设定的时长, 温柔挡屏就会出现, 不会因为手机省电就跳过。

前提是监控本身还在运行。如果手机把这个服务彻底冻结或者杀掉了, 那是另一个问题, 我们单独写了一篇讲怎么处理。

简单说: 偏差通常表现为延迟; 在监控正常运行的前提下, 到了限额会挡住。

还有一层后果值得说清楚,因为这才是家长真正会察觉到的:这点偏差不只落在”阻断”上,也落在提醒上。60%、75%、90% 这三次提醒,都可能比算术上的时刻稍晚一点到——这也是这套设计宁可用好几次轻提醒、而不是一次倒计时的原因之一,理由写在这里

我们把这条边界写进了用户协议

我们没有在任何宣传里说过”分秒精准""毫秒级监控”这种话。 相反, 我们把上面这条”可能会晚几分钟”的边界, 老老实实写进了用户协议里

为什么要写进协议? 因为我们觉得: 一个帮孩子管时间的工具, 如果连自己的”误差脾气”都不肯告诉家长, 那它凭什么让你信任它去管你最在乎的人?

吹”绝对精准”很容易, 真到了那台爱省电的手机上掉链子, 失望的是你。我们宁可一开始就把丑话说在前头。

另外值得知道的是:没有谁能绕开这件事。 上面那些限制都在平台层,对安卓上每一个屏幕时间 App 都成立,包括谷歌自家的。产品之间的差别只在于说不说。我们逐页对比过各家自己文档里关于计时和预警的说明,结果是大部分都没提

给家长一句话

如果你需要的是”卡着秒数一分不差地断”的工具, 那小龟时光可能不是最适合你的 — 我们做不到, 也不愿假装做到。老实说,在安卓上没有哪个 App 做得到。

但如果你能接受”偶尔晚几分钟, 但绝不冤枉孩子、该停一定停”, 那我们值得你试一试。

诚实地告诉你我们的边界在哪, 本身就是我们对你的一份尊重。


本文作者是一个做小龟时光的家长,那是一个面向 6-14 岁孩子的安卓屏幕时间 App:在每日限额的 60%、75%、90% 各安静提醒一次,到 100% 才真正阻断。免费,无广告,无内购。孩子的屏幕时间数据默认留在手机本地——唯一会离开设备的是假名化的崩溃诊断和使用事件,这一点我们的隐私政策里也是这么写的。

想了解时间到的时候孩子会看到什么 → 温柔引导 想知道为什么手机爱杀后台、我们怎么应对 → 怎么让 App 不被系统关掉

参考来源

每条都标了获取层级,因为这决定了一条结论能承载多少重量。

  • “Optimize for Doze and App Standby.” Android Developers 官方文档。(全文获取,其中”九分钟”这一数字经第二次抓取复核一致。用于:闹钟/任务/同步被推迟到维护窗口、期间挂起网络、可在 Doze 期间触发的两种闹钟类型每个 App 每九分钟最多一次、设备闲置越久维护窗口越稀疏。)
  • “App Standby Buckets.” Android Developers 官方文档。(全文获取。用于:按使用近因与频率分组、分组越靠后限制越强、限制最严一组每天只允许一个闹钟。)
  • “Cached apps freezer.” Android 开源项目(AOSP)。(全文获取。用于:Android 11 起支持、冻结时所有线程挂起且无法执行 CPU 工作、Android 14 及以上进入缓存状态 10 秒后被冻结。)
  • “Don’t kill my app!”(全文获取。用于厂商激进程度排序。社区维护的开源项目,不是谷歌或厂商的官方来源——请当作有依据的社区评估,而不是文档。)
  • 小龟时光自身的行为、用户协议,以及隐私政策

我们不声称的: 一个确切的”会晚几分钟”的数字。它取决于手机型号、厂商的电源管理层、孩子最近多久用过这个 App、以及设备当时是否闲置——在这里印任何一个数字,放到大多数手机上都会是错的。

原文出处 public/24-honest-about-timing.md
由 小龟时光团队 编写与维护