使用收藏夹整理内容 根据您的偏好保存和分类内容。

超时行为

系统允许 dataSyncmediaProcessing 前台服务在 24 小时内总共运行 6 小时,之后系统会调用正在运行的服务中的 Service.onTimeout(int, int) 方法(在 Android 15 中引入)。 (mediaProcessing 前台服务类型是在 Android 15 中新增的。) 6 小时的时间限制针对 dataSyncmediaProcessing 服务分别跟踪。例如,如果某个 dataSync 服务刚刚运行了一小时,则该应用仅有 5 小时可用于 dataSync 前台服务,但仍有整整 6 小时可用于 mediaProcessing 服务。

注意: shortService 前台服务有更严格的时间限制。如需了解详情,请参阅短服务文档

注意: 6 小时的时间限制由应用的所有指定类型的前台服务共享。例如,如果一个应用运行 dataSync 服务 4 小时,然后启动另一个 dataSync 服务,则第二个服务将只能运行 2 小时。但是,如果用户将应用带到前台,计时器会重置,应用将有 6 小时可用时间。

Fatal Exception: android.app.RemoteServiceException: "A foreground service of
type [service type] did not stop within its timeout: [component name]"

让您的服务实现新的 Service.onTimeout(int, int) 方法。当您的应用收到回调时,请务必在几秒钟内调用 stopSelf()。(如果您不立即停止应用,系统会生成故障。)

  1. 确保您应用的 dataSyncmediaProcessing 服务在任何 24 小时内运行总时长不超过 6 小时(除非用户与应用互动,重置计时器)。
  2. 仅因用户直接互动而启动 dataSyncmediaProcessing 前台服务;由于服务启动时您的应用处于前台,因此在应用进入后台后,您的服务将有整整 6 小时可用时间。
  3. 您可以不使用这些前台服务,而是使用替代 API,例如 WorkManager。特别是,您也可以不使用 dataSync 前台服务,而是考虑使用替代 API
  4. 如果您应用的 dataSync 前台服务在过去 24 小时内已运行 6 小时,则您无法启动另一个 dataSync 前台服务,除非用户已将您的应用带到前台(这会重置计时器)。如果您尝试启动另一个 dataSync 前台服务,系统会抛出 ForegroundServiceStartNotAllowedException,并显示类似“Time limit already exhausted for foreground service type dataSync”的错误消息。

如需测试应用的行为,即使您的应用未以 Android 15 为目标平台(只要应用在 Android 15 设备上运行),您也可以启用数据同步超时。如需启用超时,请运行以下 adb 命令:

测试

您还可以调整超时期限,以便更轻松地测试应用在达到限制时的行为。如需为 dataSync 前台服务设置新的超时期限,请运行以下 adb 命令:

adb shell am compat enable FGS_INTRODUCE_TIME_LIMITS your-package-name

如需为 mediaProcessing 前台服务设置新的超时期限,请运行此命令:

adb shell device_config put activity_manager data_sync_fgs_timeout_duration duration-in-milliseconds

本页面上的内容和代码示例均受内容许可中描述的许可限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的商标或注册商标。

adb shell device_config put activity_manager media_processing_fgs_timeout_duration duration-in-milliseconds