TECHNICAL DOCUMENT

为什么省电优化会把家长管控 App 关掉,屏幕时间限额跟着失效

你设了两小时限额,也确认过它是开着的。三天后你翻周报,发现周二那天孩子用了四小时——而手机全程一声没吭。

真正让人恼火的不是它失灵,而是一切看上去都还是对的。限额在设置里好好写着,App 打得开,没有报错,没有警告,没有任何一个可以点的地方。

通常发生的事情是:手机不让这个 App 跑了。安卓本身就有好几套互相独立的机制会关停后台应用,厂商还会在这之上再加一层自己的。它们几乎全都默认开启,而且没有一个会在动手之后告诉你。

这篇讲清楚:这些机制分别是什么、怎么判断卡住你的是哪一个、以及八个品牌各自的设置到底在哪儿。凡是我没能在厂商自己的官方文档上核实到的菜单名,我都会直接说”没查到”,而不是编一个看起来很像的——这个话题上想当然的转抄特别多,有些抄得太久,已经变成了标准答案。

三十秒版本

  1. 一共三层,而且修好一层不等于修好另外两层:安卓自己的休眠规则、一个按应用设置的电池选项、以及(很多品牌上的)厂商启动管理。
  2. 那个叫「受限制」的按应用选项是最狠的一个。 谷歌自己的文档写明:它会把已经在跑的前台服务从前台移除,并且让这个 App 的闹钟不再触发。对一个屏幕时间 App 来说,这一个不起眼的开关就等于彻底关机。
  3. 厂商的启动管理和电池白名单是分开的。 尤其在华为上,“只做了电池那一步就停下”是这件事最常见的失败原因。
  4. 你可以用三分钟测出来,不需要任何技术工具,方法在下面。
  5. 强行停止无解。 只要有人点了强行停止,在有人重新打开它之前,什么都救不回来。这是安卓的设计,任何声称能绕过的说法都不成立。

第一部分 —— 三层机制

第一层:休眠模式(Doze)与待机分组(每一台安卓手机)

当设备拔掉充电、静止不动、并且熄屏一段时间之后,安卓会进入 Doze(休眠)。谷歌的文档列出了它会挂起什么:网络访问、唤醒锁、同步适配器,以及 JobScheduler 的任务——同一页还特别注明,因为 WorkManager 内部就是走 JobScheduler,所以 WorkManager 的任务同样不会跑。普通闹钟会被推迟到下一个”维护窗口”,而且设备闲置越久,系统安排这些窗口的频率就越低

有几类闹钟能穿过 Doze,但有一个很关键的上限:那类”允许在闲置时触发”的闹钟,每个应用每九分钟最多只能响一次。也就是说,一个想每分钟检查一次的 App,在手机进入休眠之后根本做不到。只有一个例外,而谷歌对它的描述罕见地直白(原文为英文,此处为中译):

由于这类闹钟对用户高度可见,系统绝不会调整它们的投递时间。系统将它们视为最关键的一类,并会在必要时退出低功耗模式来投递它们。

那是”闹钟类”——和早上叫醒你的那个闹钟同一类别。它是公开接口里唯一带这种保证的机制,所以做得认真的屏幕时间 App 会在真正要紧的时刻用它,而且只在那时候用:全天候一直用,等于整夜每分钟把手机唤醒一次,那是另一种意义上的坏掉。

另外还有待机分组(App Standby),它把应用分成活跃、常用、较少、极少、受限几档,越往后拿到的越少。在”极少”档里,一个应用一小时只有一次闹钟且没有网络;在”受限”档里,一天只有一次闹钟。在 Android 13 及以上,用户连续 8 天没有和某个应用交互,它就会掉进受限档。对家长管控类 App 来说这太正常了——它本来就是设计成没人会去打开的。

第二层:按应用的电池选项

在基本上任何一台安卓手机上打开设置 → 应用 → 该应用 → 电池,你会看到三个选项。谷歌的开发者文档给了定义:

  • 无限制(Unrestricted)—— 允许全部后台工作,可能更费电。
  • 优化(Optimized,默认)—— 由系统根据你使用这个应用的情况来决定。
  • 受限制(Restricted)—— 完全阻止该应用在后台运行。

第三个选项配得上一个比现在响得多的警告。按同一份文档:处于受限状态的应用不能启动前台服务,已经存在的前台服务会被从前台移除,闹钟不会被触发,任务也不会被执行

把这句话对着一个屏幕时间 App 再读一遍。那条常驻通知就是前台服务。如果有人把这个 App 设成了”受限制”——而手机有时候会在”该应用耗电较多”的提示里主动建议你这么做——这个 App 就被全面关停了,同时它看起来仍然装着、也仍然配置好了。这一层是我建议最先去查的,因为它只有一屏,而且它能完整解释你看到的现象。

谷歌确实允许应用申请豁免电池优化,但只限于特定类别。开发者文档上的”可接受用途”清单里明确包含安全类应用——“保护用户及其家人安全的应用”——这正是一个家庭屏幕时间 App 可以正当申请它的依据。同时 Google Play 的《设备与网络滥用》政策把”绕过系统电源管理”列为违规,前提是该应用并不符合豁免资格。所以,一个向你要这个权限的 App,应该是真的属于该被豁免的那一类。

第三层:厂商的启动管理

到这里就开始分品牌了,而大部分混乱也都在这一层。

在原生安卓上,跑一个前台服务本来就该够用了。谷歌关于安卓应用冻结器的文档写明:有可见界面或前台服务的应用不会被冻结,只有进入缓存状态的进程会被冻结,在 Android 14 及以上是进入缓存状态十秒后。

有几家厂商做得比原生安卓更多。它们的系统可以在一个应用正跑着前台服务的情况下照样把它的后台进程挂起——而且关键在于,它们是通过自己的控制项做到的,安卓的接口看不见这些控制项。一个应用可以去查电池白名单、查自己的待机分组、查后台运行有没有被限制,三项全部返回”一切正常”,同时它已经被冻得死死的。

我们在自己的测试机上测过。在一台 华为 GFY-AL00(EMUI 14.2,Android 12) 上,厂商的应用启动管理保持默认设置时,视频 App 在前台期间我们的监控服务几乎拿不到任何 CPU 时间。把这一个设置改成手动之后,变成三分钟里约 45 秒 CPU 时间,倒计时也重新开始实时更新。

在另一次华为 EMUI 手机上的测试里,我们看到系统把这个 App 每分钟一次的心跳闹钟扣了五分多钟——系统自己的闹钟转储报告的最大延迟约为五分钟,而本该立刻出现的阻断画面迟到了 5 分 33 秒。改用上面引用的那类闹钟之后,同样的场景降到了约 57 秒。

有两点我想说清楚。这是一台手机、一个 ROM 版本——我讲的是我们手上这台设备的表现,不是在给一个品牌下定论。另外,这不是厂商在使坏:激进的后台管理正是这些手机待机时间好的重要原因,而且它生长在一个后台滥用唤醒确实很普遍的市场里。代价是,那些你特意希望它在后台跑的应用,得由你亲手、在一个几乎没人会去的地方,把它们一个个标出来。

强行停止是第四件事,而且是终点

如果有人进设置、找到这个 App、点了强行停止,那和上面所有情况都不是一回事。谷歌明确写了:应用会保持在这个停止状态,直到用户自己再次打开它,在那之前连”开机完成”的广播都收不到;Android 15 还会额外取消它排好的待处理意图、并把它的桌面小组件置灰。

没有绕过的办法。我们没有,谁都没有。这是一个”最终由用户决定一个应用跑不跑”的设计取舍,尽管它在这里很不方便,我认为它是对的。

第二部分 —— 怎么判断是不是你遇到的这件事

三个测试,从最省事的开始,都不需要工具。

测试一 · 计数测试。 记下 App 显示的剩余分钟。把手机交出去,或者自己打开孩子会用的那个 App,让它在前台待三分钟,中间不要来回切。然后回来看剩余分钟。

  • 少了大约三分钟,而且你一看就是对的 → 它在跑。
  • 完全没动 → 它没在跑。
  • 在你打开屏幕时间 App 之后一两秒里跳着追上来 → 这条最有诊断价值。它意味着孩子在看的时候它没在计数,是事后把这段补算回来的。做得好的 App 会把这段补上、不让孩子白赚时间,但补回来的时间没法在该拦的那一刻拦住任何东西

测试二 · 那条常驻通知还在吗? 一个正在监控的屏幕时间 App 应该有一条常驻通知。如果它不见了,前台服务就没了。在往更复杂的方向想之前,先去看看这个 App 是不是被设成了受限制(第二层)。

测试三 · 过夜测试。 睡前记一下剩余分钟,第二天早上在打开任何东西之前再看一次。如果它整夜把时间跟丢了,或者常驻通知消失了,那问题在 Doze 或厂商的管理,而不是某次偶然。

如果这几条指向了问题,修法在第三部分。顺序建议是:先看按应用的电池选项(只有一屏,能解释大多数情况),再看厂商的启动管理,最后才是其他。

第三部分 —— 各品牌的设置在哪儿

关于这张表,先说老实话。厂商对这些设置的官方文档,从”写得不错”到”根本没有”都有,菜单名还会随系统版本变。我给每一条都标了能不能在厂商自己的站点上核实到。核实不到的,我直接写”未核实”,而不是印一条看起来很合理的路径——我原本准备写的路径里有三条在核实之后是错的,所以这份谨慎是有来由的。

另外要说明:除华为外,下面这些路径我核实到的都是官方英文页面。中文系统里对应的菜单名可能不同,我没有在官方中文页面上核到它们,所以英文原串一并给出,方便你在自己手机上对号入座。

品牌设置在哪儿核实情况
华为打开设置,搜索应用启动管理,关闭自动管理,再打开允许自启动允许关联启动允许后台活动官方(含中文)
小米 / 红米 / POCO设置 → 应用 → 权限 → 自启动(英文官方原串 Settings → Apps → Permissions → Background autostart官方(英文页)
三星Settings → Battery → Background usage limits(One UI 7)或 Settings → Battery and device care → Battery → Background usage limits(更早版本),把该应用加入”永不休眠”那个列表官方(英文页)
一加Settings → Apps → Auto launch;另有 Settings → Battery → More settings → Sleep standby optimization官方(OxygenOS 13 说明书)
vivo / iQOOSettings → More settings → Permission management(Applications) → Autostart官方(英文页)
OPPO / realme手机管家里有自启动和后台运行的控制项,但没有核实到当前版本的确切路径未核实
魅族完全没有找到官方文档未核实
联想 / 摩托罗拉接近原生,用 设置 → 应用 → 该应用 → 电池 → 无限制原生安卓路径

逐个补充:

华为。 绊住最多人的一家,因为应用启动管理和电池优化是两个不同的开关,只做电池那一个不够。华为自己的支持页把它们列成同一个 App 下的两个分开步骤。它也是菜单路径最不稳的一家——华为官方页面里至少出现过五个不同位置,所以在设置里搜索比一层层点更靠谱。另外值得一提:设置 → 电池 → 应用启动管理,这条几乎所有第三方教程都在抄的路径,我在华为任何官方页面上都没找到。完整走法和验证方法见华为专篇

小米。 官方的开关名是 Background autostart,位置在应用 → 权限下面——不是大多数教程说的”应用管理里的自启动”,那也是我在核实之前以为的位置。小米还有一个电池页面 Settings → Battery → Battery settings → App battery saver;这个页面有官方文档,但页面上那几个选项的名字没有,所以在那一屏里请选限制最弱的那一项,不要去对某个你在别处看来的名字。

三星。 三星最近改过命名,而且两套叫法现在都还在用。One UI 7 上这个列表叫 Never auto sleeping apps;更早的版本叫 Never sleeping apps,从”设备维护”那条路进去。把 App 加进那个列表,同时确认它不在 Sleeping appsDeep sleeping apps 里。三星还有一个 Put unused apps to sleep 的开关,会正好逮住那种没人打开的 App。三星那个按应用的”无限制/优化/受限制”页面,我没有找到官方文档,所以这一条我不给三星的路径。

一加。 依据是一加 11 的官方英文说明书:在并入 ColorOS 之后,一加仍然保留了独立的 Auto launch 管理,位置在 Settings → Apps 下面。而被广泛转抄的 Battery optimization → Advanced optimization → Deep optimization 这条路径,在那本说明书里一次都没出现过,它描述的是更早的 OxygenOS 版本。

vivo。 自启动那条路径在 vivo 官方支持站上有据可查。“后台高耗电”白名单被提到得很多,你手机上大概率也有,但 vivo 没有给出我能查到的路径,所以我不印。

OPPO 和 realme。 这里我确实什么都没核实到。OPPO 的支持文章是 JavaScript 页面,抓不到正文;官方能索引到的说明书只到好几代之前的 ColorOS 版本。OPPO 的手机管家确实有自启动和后台运行的控制项——他们自己的新闻稿提到过——但没有配上任何菜单路径。请在手机管家和该应用自己的应用信息页里找,网上更具体的说法请当作未经确认。

魅族。 没有。英文中文都没有找到可访问的官方文档。能找到的社区资料既不引用魅族文档,也不标注版本。

联想和摩托罗拉。 这两家接近原生安卓,一般不加自启动管理,所以真正起作用的是原生那个按应用的电池选项。(摩托罗拉确实有一个官方页面显示了”Auto launch management”菜单,但它既没写机型也没写安卓版本,所以我没法告诉你它适用于哪些手机。)

这些都做完之后,仍然解决不了的事

没有任何设置能让一个 App 杀不掉。 这页上的每一条你都做了,仍然可能被一次低内存回收、一次重置了你选项的系统更新、或者某个没人写进文档的厂商省电功能干掉。

强行停止依然是终点,如上。如果孩子大到会自己进设置点强行停止,任何配置都拦不住——那时候你面对的是另一场对话,关于你和他之间的约定,而不是关于手机设置。

屏幕时间 App 应该在自己被打断之后告诉你。 既然安卓读不到厂商私有设置的状态,唯一诚实的信号就只能是事后的:发现”监控中断期间确实产生了使用”,然后把这件事说出来。那是烟雾报警器,不是防火门——值得有,但代替不了上面那些设置。

可靠性和续航之间是真的有取舍。 这里每一条豁免都意味着这个 App 跑得更多。一个规矩的屏幕时间 App 应该只花你很少的电,但”能稳定在后台工作”和”完全不耗电”没法同时成立。

相关阅读


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

参考来源

每条都标注了获取层级,因为这直接决定该条结论能承受多重的分量。

  • 《Optimize for Doze and App Standby》 安卓开发者文档。(全文两次获取。Doze 挂起哪些能力、维护窗口随闲置时间变稀、“允许在闲置时触发”闹钟的九分钟下限、待机判定条件,以及电池优化豁免的可接受用途清单(含”保护用户及其家人安全的应用”)的出处。)
  • 《App Standby Buckets》 安卓开发者文档。(全文获取。分档名称的出处。)
  • 《Power management restrictions》 安卓开发者文档。(全文获取。各档闹钟与网络配额、以及 Android 13+ 连续 8 天无交互进入受限档的出处。)
  • 《Optimize battery use for App Standby》 安卓开发者文档。(全文获取。无限制/优化/受限制三个选项的定义,以及”受限状态会把已存在的前台服务从前台移除、闹钟不触发、任务不执行”的出处。)
  • 《Schedule alarms》 安卓开发者文档。(全文两次获取,第二次要求逐字复现,两次一致。上文所引那段的出处。英文原文为 “Because these alarms are highly visible to users, the system never adjusts their delivery time. The system identifies these alarms as the most critical ones and leaves low-power modes if necessary to deliver the alarms.”,正文中的中文为本文翻译。)
  • 《Behavior changes: all apps》(Android 15) 安卓开发者文档。(全文获取。强行停止状态持续到用户主动打开、开机广播投递时机、Android 15 取消待处理意图并置灰小组件的出处。)
  • 《Cached apps freezer》 安卓开源项目(AOSP)。(全文获取。有可见界面或前台服务的应用不被冻结、以及 Android 14+ 缓存进程十秒后被冻结的出处。)
  • 《Device and Network Abuse》 Google Play 开发者政策。(全文获取。“不符合豁免资格的应用绕过系统电源管理属于违规”的出处。)
  • 《应用退出后台后被清理怎么办》 华为消费者业务支持(中国站)。(全文两次获取。中文三步骤与”两个分开的开关”结论的出处。)
  • 《How Do I Keep an App Running in the Background》 华为消费者业务支持(全球英文站)。(全文两次获取。三个开关英文名的出处。)
  • 《Setting App Launch》 华为消费者业务支持(全球英文站)。(全文两次获取。搜索式走法与”自动管理”的出处。)
  • 《How to switch on/off the Background autostart for APPs》 小米全球支持,KA-507611。(全文两次获取。Settings → Apps → Permissions → Background autostart 的出处。小米按机型发布了多篇措辞完全相同的同一文章;页面未标注系统版本,只标机型。)
  • 《How to enable App battery saver》 小米英国支持,KA-61830。(全文两次获取。App battery saver 路径的出处。该页只写了这一屏的名字,没有列出屏内的选项名,所以选项名不以此为据。)
  • 《Background usage limits》 三星美国支持。(全文两次获取。One UI 7 路径与 Never auto sleeping apps 的出处。)
  • 《How to use Background usage limits》 三星美国支持。(全文两次获取。更早版本路径与 Never sleeping apps 的出处。三星这两个页面确实互相不一致,因为界面改过,所以上文把两套都列了出来。)
  • 一加 11 5G 官方英文用户手册(PDF) OnePlus。(下载后以程序方式抽取文本,非模型转述。Settings → Apps → Auto launchSettings → Battery → More settings → Sleep standby optimization 的出处,以及”整本手册中不存在 Deep optimization / Don’t optimize”这一判断的依据。)
  • 《How to turn on/off Autostart for my apps》 vivo 官方支持(菲律宾站)。(全文两次获取。Settings → More settings → Permission management(Applications) → Autostart 的出处,括号也是原文的一部分,适用于 Funtouch OS 2.6 以上。)
  • 《Boost your battery》 OPPO 新闻中心。(全文获取。可以确认手机管家里有自启动和后台控制项,但没有给出任何菜单路径——这也正是上文不印 OPPO 路径的原因。)
  • 我们自己的真机测试,华为 GFY-AL00,EMUI 14.2,Android 12。(厂商应用启动管理在默认与手动两种状态下监控服务 CPU 时间的对比;以及在一台华为 EMUI 手机上的另一次测试——系统闹钟转储报告每分钟心跳的最大延迟约五分钟,阻断迟到 5 分 33 秒,改用闹钟类之后降到约 57 秒。均为我们自己在华为设备上的测量,每次都只是单一 ROM 版本,作为观察记录,不作为品牌层面的结论。)
  • dontkillmyapp.com。(社区维护,厂商官方文档。上面每个品牌都查过。这里只用来说明:某些被广泛转抄的路径(例如华为的”设置 → 电池 → 应用启动管理”)在官方页面上没有依据。)

未核实: OPPO 与 realme 在任何当前 ColorOS 版本上的菜单路径;魅族的任何路径;vivo”后台高耗电”白名单的路径;小米 App battery saver 屏内各选项的名称;三星按应用的”无限制/优化/受限制”路径;摩托罗拉那个 “Auto launch management” 页面适用的机型范围。荣耀没有单独查证——它 2020 年从华为拆分、现在用的是 MagicOS,所以华为的路径对它只是一个起点,不是已核实的答案。

原文出处 public/32-parental-control-killed-by-battery-saver.md
由 小龟时光团队 编写与维护

添加开发者微信

扫码与我建立联系

WeChat QR Code

验证信息请注明: 小龟时光 用户