0

前台服务管理器:如何手动在 Android 13 上「杀死」一个应用

 2 years ago
source link: https://sspai.com/post/72283
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

任务、活动与服务

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

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

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

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

1

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

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

1前台服务其实相当常见

为什么要限制前台服务

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

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

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

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

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

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

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

1

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

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

与「划卡强杀」的区别

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

1

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

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

c8u75s5b34t9g620dfig.gif

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

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

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

参考资料:

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK