系统会根据设备状态、应用状态和应用的待机分桶来确定应用资源请求的优先级。
Android 系统可以通过两种不同的方式强制执行资源限制。优化资源利用率的方法之一是推迟工作执行,直到设备离开低功耗设备状态(例如休眠模式)。例如,系统会推迟常规作业和不精确闹钟,以便在设备退出休眠模式后执行这些作业和闹钟。
另一种方法是根据应用的当前待机分桶,减少应用唤醒设备并执行工作的次数。系统可以同时减少频率(应用唤醒设备的频率)和总时长(设备保持唤醒状态的时长)。例如,如果应用位于极少使用待机分桶中,则在 24 小时滚动期内,该应用可以运行的预定作业总时长为 10 分钟。
请注意,当应用不可见且工作器因此受到作业资源限制影响时,WorkManager 会使用 JobScheduler 调度任务。
如需进一步了解相关限制,请参阅以下资源:
请注意,设备状态和应用状态可以替代应用待机分桶限制。例如,如果设备正在充电,系统会允许极少使用待机分桶中的应用在 24 小时滚动期内执行作业的时间超过 10 分钟。
行为也发生了变化,这也影响了资源限制。如需了解详情,请参阅影响资源限制的 Android 行为变更。
基于设备状态的资源限制
系统还可以根据设备状态豁免或强制执行资源限制。例如,无论处于哪个应用待机模式存储分区,处于充电状态的设备都会获得无限制的资源访问权限。
设备状态 |
求职招聘 |
闹钟 |
网络访问 |
Firebase 云消息传递 |
正在充电 |
无执行数限制,但受限待机分桶除外 |
所有待机分桶和进程状态均无执行限制,但如果用户手动限制应用电池用量,则除外 |
无限制 |
无限制 |
屏幕开启 |
系统会根据待机模式存储分区强制执行执行限制 |
系统会根据应用进程和待机模式存储分区强制执行执行限制 |
访问权限取决于待机分桶或应用进程状态 |
无限制 |
屏幕关闭且休眠功能处于活跃状态 |
根据待机模式存储分区强制执行限制,并将执行延迟到休眠维护窗口 |
系统会根据待机模式存储分区强制执行执行限制。 常规闹钟:推迟到休眠维护期 闲置时闹钟:上限为每小时 7 次 |
在休眠期间受限 |
高优先级:无执行数限制 普通优先级:推迟到休眠维护窗口 |
基于应用状态的资源限制
系统是否强制执行应用待机模式存储分区的资源限制取决于应用进程的重要性。请参阅 ActivityManager.RunningAppProcessInfo.importance
,了解进程重要性的不同级别。
设备用户还可以选择手动替换应用功耗管理优化,这会替换应用待机分桶限制。
应用状态 |
求职招聘 |
闹钟 |
网络 |
应用进程处于可见状态或前台状态 |
无执行限制 |
无频次限制 |
无限制 |
应用进程正在运行一项前台服务 |
系统会根据待机模式存储分区强制执行执行限制*** |
系统会根据待机分桶强制执行频次限制 |
无限制 |
用户手动限制应用电池用量 |
执行受限 |
执行受限 |
访问权限取决于待机存储分区行为 |
用户手动取消限制应用电池 |
执行限制非常宽松*** |
无执行限制 |
不受限制,除非设备处于流量节省模式 |
*** 作业的执行配额行为在 Android 16 中发生了变化。在 Android 16 之前,当应用运行前台服务或用户未限制应用电池用量时,没有执行限制。
基于应用待机分区的资源限制
注意:此表中的值不能保证执行时长,因为其他设备条件或存储分区更改可能会影响资源限制。这些值在未来的 Android 版本中也可能会发生变化。
系统可能会根据应用待机分桶限制常规作业、加急作业、警报和网络访问。您可以将这些大致的电源管理限制作为指南,了解应用待机分桶对您的应用有何影响。为了获得最佳性能,请遵循应用待机模式最佳实践,并优化任务调度 API 的电池用量。
请注意,从 Android 13 开始,应用的待机模式存储分区不再决定应用可以使用多少个高优先级 FCM。
应用待机分桶 |
常规工作* |
加急作业** |
闹钟 |
网络 |
活跃: |
在 60 分钟的滚动时间段内,最长 20 分钟*** |
在 24 小时内最多 30 分钟*** |
无执行限制 |
无限制 |
工作集: |
在 4 小时内最多 10 分钟 |
在 24 小时滚动期内,最长 15 分钟 |
上限为每小时 10 次 |
无限制 |
常用: |
在 12 小时滚动期内,最长 10 分钟 |
在 24 小时内最多 10 分钟 |
上限为每小时 2 次 |
无限制 |
极少使用: |
在 24 小时内最多 10 分钟 |
在 24 小时内最多 10 分钟 |
上限为每小时 1 次 |
已停用 |
受限: |
每天 1 次,最长 10 分钟 |
在 24 小时滚动时间范围内,最长 5 分钟 |
已停用 |
* 常规作业是指不使用 JobScheduler 中的 setUserInitiated(true)
或 setExpedited(true)
标志,也不使用 WorkManager 中的加速型工作器的作业。
** 与常规作业不同,加急作业具有单独的执行限制,可以在WorkManager 中进行配置,以便在耗尽加急限制后使用常规作业执行限制继续运行。
*** 作业的执行配额行为在 Android 16 中发生了变化。在 Android 16 之前,当应用位于“活跃待机”分桶中时,没有执行限制。
影响资源限制的 Android 行为变更
以下 Android 更新对应用资源限制进行了更改。
Android 16
Android 已根据以下因素调整了常规作业和加急作业执行运行时配额:
- 应用所在的应用待机分桶
- 如果作业在应用处于顶部状态时开始执行
- 如果作业在运行前台服务时执行
Android 13
高优先级 Firebase Cloud Message (FCM) 配额行为变更
- 应用待机模式存储分区不再决定应用可以使用多少个高优先级 FCM。
- 如果系统检测到应用持续发送不会导致显示通知的高优先级消息,现在会将这些消息降级
- 如需了解高优先级消息的当前准则,请参阅 Firebase 文档中的“设置和管理消息优先级”部分。
Android 9
Android 9 引入了新的电池管理功能:应用待机存储分区。应用待机分桶有助于系统根据应用的使用时间新近度和使用频率来确定应用资源请求的优先级。优先级分桶有五个,系统会根据应用使用模式将每个应用放置在其中一个分桶中。系统会根据应用所在的存储分区限制每个应用可用的设备资源。