查看原文
其他

前台服务也受限了,Android 13 重磅更新之 FGS Manager

TechMerger 2022-08-07

The following article is from 少数派 Author 路中南

每一次 Android 大版本更新都会带来不少底层机制的更新,其中最为重要、也是用户最为关注的部分,除了界面设计应该就是「性能与续航」了。

具体到今年刚刚发布的 Android 13 开发者预览版,新增的「前台服务管理器,FGS Manager」尤为令人瞩目。

任务、活动与服务

在 Android 系统上,前后台的区分其实相当符合直觉:用户看不到的就是后台,其余看得到的就是前台。但对我们这些日常操作主要是「打开应用、切换多任务、划走应用卡片」的用户来说,「服务」这个概念就有点不好理解了。

让我们把应用拆开——大部分时候,和我们产生交互的其实都只是应用中的一部分,这些不同的交互界面我们称之为「活动窗口」;在活动窗口之外,应用还可以自己独立运行一项「服务」,根据 Google 的官方文档介绍,服务是一种可在后台执行长时间运行操作,而不提供界面的应用组件。

典型的前台服务,包括音乐播放、健身记录、位置共享、语音或视频通话等。对于前台服务,系统会尽可能地将它们通过通知系统暴露给用户。

以照片备份上传为例,一旦开始备份,OneDrive 便会弹出一条通知,告知用户照片备份上传的具体进度,这就是一个典型前台服务通知。这个时候如果我们在多任务界面将 OneDrive 的活动窗口划去,那么这条通知依然存在、备份也会进行下去。当备份完成的那一刻,这个服务也就走到了它的时间终点,通知也会自动消除。

所以如果日后打开应用时冷不丁冒出一条「正在同步……」的通知,或是拍完照片后弹出一条「正在优化照片」的通知,不用感到意外,这说明系统和应用的协作一切正常。

至于后台服务……用户甚至都不会感知到自己的手机跑了哪些后台服务,且 Google 倾向于让应用把长期的后台任务交给系统来执行,就像在 iOS 上那样,就需要另开一篇文章聊这事儿了。

前台服务其实相当常见

为什么要限制前台服务

通过通知系统来告知用户,让应用得以获取用户的注意焦点来提升运行优先级,并最终得以完成任务。在我看来这是很聪明的做法,如今这样的机制也已经成为应用确保任务完成的重要手段。

不过从上面的介绍中也不难看出,前台服务主要有两大特点:

  1. 即使用户停止与应用的交互,仍能继续运行
  2. 执行过程中必须显示通知

所以将二者结合起来可以得出的另一种事实却是,只要应用保证通知正常显示,它的前台服务就能持续保持运行。

因此同样的机制如果被滥用,也是有可能造成大量系统资源浪费的。在现实世界中,各类魔改 UI 帮助用户「收纳」通知不说,应用本身可能也会弹出具有迷惑性的通知(比如伪装成天气数据 )来保证自己的服务持续存活。更不用提大部分用户对「应用挂个通知就能持续运行」这件事情毫无概念了。

针对这类情况,必要的检测和停用手段是必须的。Android 13 这次引入的前台服务管理器终于补上了这一环。

防范管控的第一步,自然是先将所有前台服务的应用罗列出来。Android 13 的快速开关面板在重新布局的同时,底部也多出了一栏「前台服务管理器」,点击展开后即可看到当前正在活跃的应用,点击对应的「停止」按钮就能一键让应用停止运行,可谓是相当「快准狠」的管理方式。

其次 Android 系统也会帮助用户对前台服务进行监督,具体的机制是,在以 24 小时为单位的时间长度内,如果某应用的前台服务运行超过 20 小时,系统就会发送通知告诉「XX 已经长时间后台运行,点击查看详情」。这时点击通知也会跳转到上述前台服务任务管理器当中。

根据 Android 13 现阶段的设计,针对同一应用这样的警告通知不会在 30 天内重复出现。另外也不是所有应用都会出现在前台服务管理器中,系统级应用、紧急安全相关应用不会出现在这个列表中;部分应用会出现在这个列表中但没有「停止」按钮,比如激活设备所有方的应用、拨号应用等。

与「划卡强杀」的区别

在关于前台服务管理器的相关文档中,我们也得以第一次看到现代 Android 对「多任务界面上划应用卡片」这个行为的定义,以及它和前台服务管理器的实际区别。

早年黑域、绿色守护和部分厂商的「划卡强杀」其实更接近最右侧的 Force stop,也就是强行停止。现在进入到应用管理的详情页也依旧能够看到这个按钮,被强行停止的应用会停止一切活动,一般来说不能再自行启动,只能用户手动或其余应用拉起才能恢复运行。

从这张表也可以看出,多任务界面真真切切变成了「应用运行历史记录」,而非代表应用的实际运行状态。划走卡片只是取消了历史记录以及清走「活动窗口」,应用并不会立刻从 RAM 离开,理论上来说可以继续保留通知、播放媒体。

前台服务管理器的停止按钮除了会暂停前台服务,也会将应用从 RAM 中驱离。需要注意的是,此时应用只是停止了运行,并不会从多任务窗口中移除,这一考虑或许是为了方便用户快速恢复任务,同时减少系统资源消耗。

结语

阅读近两个版本的 Android 开发指南文档,给我最大的感受就是 Google 试图让系统机制来接管应用的活动、服务进程等,而不建议开发者自己处理。由系统接管具体行为的做法不仅可以减少应用对系统资源、权限的滥用,同时也能有效保护用户隐私,这一点隔壁阵营应该早有实践。

只是现阶段的文档口径都只是「建议」,希望 Google 未来可以一步步落实,让 Android 系统真正转变为「人机交互」的操作系统。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存