无论应用采用何种目标 SDK 版本,Android 13(API 级别 33)都允许用户从抽屉式通知栏中停止前台服务。这项新功能称为前台服务 (FGS) 任务管理器,它会显示当前正在运行前台服务的应用列表。此列表的标签为使用中的应用。每个应用旁边都有一个停止按钮。图 1 说明了搭载 Android 13 的设备上的 FGS 任务管理器的工作流程:
用户操作会停止您的整个应用
当用户在 FGS 任务管理器中按您应用旁边的停止按钮时,系统会停止您的整个应用,而不仅仅是正在运行的前台服务。
比较“向上滑动”用户操作和“强行停止”用户操作的行为
请参见下表中 FGS 任务管理器与现有功能的比较:从最近用过屏幕“向上滑动”和“强行停止”出现异常的应用。
FGS 任务管理器 | 向上滑动 | 强行停止 | |
---|---|---|---|
立即从内存中移除应用 | ✔ | ✔ | |
停止媒体播放 | ✔ | ✔ | |
停止 FGS/移除关联的通知 | ✔ | ✔ | |
移除 activity 返回堆栈 | ✔ | ✔ | ✔ |
从历史记录中移除应用 | ✔ | ✔ | |
取消预定作业 | ✔ | ||
取消闹钟 | ✔ |
用户从 FGS 任务管理器停止应用时,不会发送任何回调
当用户按停止按钮时,系统不会向您的应用发送任何回调。当应用启动备份时,建议您检查一下现有 ApplicationExitInfo
API 中的新 REASON_USER_REQUESTED
原因,这可能会很有帮助。
与长时间运行的前台服务相关的系统提示
如果系统检测到您的应用长时间运行某项前台服务(在 24 小时的时间段内至少运行 20 小时),便会发送通知邀请用户与 FGS 任务管理器互动。
豁免
系统会针对特定类型的应用提供几种级别的豁免,下面几部分将介绍这些豁免。
豁免针对的是应用而不是进程。如果系统豁免了应用中的一个进程,则该应用中的所有其他进程也会被豁免。
完全不会显示在 FGS 任务管理器中
以下应用可以运行前台服务,而完全不会显示在任务管理器中:
- 系统级应用
- 安全应用,即具有
ROLE_EMERGENCY
角色的应用 - 处于演示模式的设备上的应用
免于被用户停止
当以下类型的应用运行前台服务时,它们会显示在 FGS 任务管理器中,但应用名称旁边没有可以供用户按的停止按钮:
- 设备所有者应用
- 资料所有者应用
- 常驻应用
- 具有
ROLE_DIALER
角色的应用
测试
如需测试应用在用户停止应用的过程中和之后的行为是否符合预期,请在终端窗口中运行以下 adb 命令:
adb shell cmd activity stop-app PACKAGE_NAME