Android 12 (四)

前台服务启动限制

以 Android 12 为目标平台的应用在后台运行时无法再启动前台服务,但一些特殊情况除外。如果应用在后台运行时尝试启动前台服务,并且前台服务不符合任何特殊情况,则系统会抛出 IllegalStateException

如果您的应用受到此变更的影响,建议您转向使用 WorkManager。Android 12 Beta 版发布时,WorkManager 将成为启动高优先级后台任务的推荐解决方案。

Work Manager 2.7.0-alpha01 支持加急作业,后者是 Android 12 中的一种新作业。在 Android 11 及更低版本中,此版本的 WorkManager 使用前台服务提供向后兼容性。

如需查看 Work Manager 2.7.0-alpha01 如何使用加急作业的完整示例,请查看 GitHub 上的 WorkManagerSample

加急作业

Android 12 新推出的加急作业允许应用执行重要任务,同时使系统能够更好地控制对资源的访问权限。 加急作业在前台服务和 JobScheduler 作业之间具有一组特征:

  • 它们不受某些系统电源管理限制(包括省电模式和低电耗模式)的影响。
  • 只要系统的当前工作负载允许,系统就会立即运行这些作业。

加急作业可能会延迟

系统会尝试在调用指定的加急作业后,尽快执行该作业。但与其他类型的作业一样,如果正在运行的作业过多或系统资源不足,系统可能会延迟启动新的加急作业。

具体而言,当至少发生以下任一情况时,系统就会推迟执行加急作业:

  • 系统负载过高。
  • 已超出加急作业配额限制。加急作业使用基于应用待机存储分区的配额系统,并限制滚动时间窗口中的最大执行时间。用于加急作业的配额比用于其他类型的后台作业的配额限制更大。

WorkManager 更新

从 WorkManager 2.7.0-alpha01 开始,您的应用可以调用 setExpedited() 来声明 Worker 应该加急处理。在 Android 12 上运行时,这个新 API 使用了加急作业,并在早期 Android 版本中使用了前台服务。

为了鼓励开发者在其应用中请求加急作业时进行有意识的考量,并更好地支持可以延长任务运行时间的功能,现已弃用 CoroutineWorker.setForeground() 和 ListenableWorker.setForegroundAsync() 方法。特别是在运行 Android 12 的设备上,尝试调用 ListenableWorker.setForegroundAsync() 会导致 IllegalStateException。建议开发者改为使用 setExpedited()

允许从后台启动前台服务的情况

在以下情况下,即使您的应用在后台运行,也可以启动前台服务:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值