1. 应用待机群组是啥?
Android 9 引入了一个新功能,叫应用待机群组。简单来说,就是根据你最近使用应用的频率和时间,系统会把应用分成不同的“群组”。每个群组的应用能用的系统资源不一样,比如后台任务、闹钟、网络请求啥的。系统会根据你用的多少,动态调整应用在哪个群组里。
2. 群组分类及限制
系统会把应用分成五个群组,每个群组的限制不一样。比如,你常用的应用会被分到ACTIVE群组,几乎没啥限制;而不常用的应用可能会被分到RARE群组,限制就多了。这些限制主要是为了省电,只有在用电池的时候才会生效,充电的时候就没这些限制了。
3. 群组分类及限制
群组 (Bucket) | Jobs (最长运行 10 分钟) | Alarms (最长运行 10 秒) | Network (临时恢复时长:10 分钟) | FCM 高优先级 |
ACTIVE | 无限制 | 无限制 | 无限制 | 无限制 |
WORKING_SET | 每 2 小时 | 每 6 分钟 | 无限制 | 无限制 |
FREQUENT | 每 8 小时 | 每 30 分钟 | 无限制 | 10 次/天,之后降级为普通 |
RARE | 每 24 小时 | 每 2 小时 | 每 24 小时 | 5 次/天,之后降级为普通 |
NEVER | 从不 | 从不 | 从不 | 从不 |
4. 需要注意的几点
厂商自定义:每个手机厂商可以自己定标准,决定哪些应用是“不活跃”的。
别瞎折腾:开发者不应该试图去影响应用在哪个群组,而是应该确保应用在当前的群组里能正常运行。
查群组:应用可以通过调用 UsageStatsManager.getAppStandbyBucket() 来查自己当前在哪个群组。
白名单例外:如果应用在低电耗模式的白名单里,那这些群组限制就不适用了。
5.五个群组的特性
以下是五个应用待机群组的详细特性:
群组 (Bucket) | 特性描述 | 示例场景 | 系统限制 |
活跃 (Active) | 用户当前正在使用应用,应用处于活跃状态。 | - 应用已启动一个 Activity - 应用正在运行前台服务 - 应用的同步适配器与某个前台应用使用的 content provider 关联 - 用户在应用中点击了某个通知 | 无限制 系统不会对应用的作业、报警或 FCM 消息施加任何限制。 |
工作集 (Working Set) | 应用经常运行,但当前未处于活跃状态。 | - 用户每天都会使用的社交媒体应用 - 应用被间接使用(如通过其他应用调用) | 轻度限制 - 作业:每 2 小时运行一次 - 报警:每 6 分钟触发一次 - 网络:无限制 - FCM:无限制 |
常用 (Frequent) | 应用会定期使用,但不是每天都必须使用。 | - 用户在健身房使用的锻炼跟踪应用 - 每周使用几次的应用 | 较强限制 - 作业:每 8 小时运行一次 - 报警:每 30 分钟触发一次 - 网络:无限制 - FCM 高优先级:每天最多 10 次,之后降级为普通优先级 |
极少使用 (Rare) | 应用不经常使用,偶尔才会用到。 | - 用户仅在旅行时使用的酒店应用 - 每月使用几次的应用 | 严格限制 - 作业:每 24 小时运行一次 - 报警:每 2 小时触发一次 - 网络:每 24 小时连接一次 - FCM 高优先级:每天最多 5 次,之后降级为普通优先级 |
从未使用 (Never) | 应用安装后从未运行过。 | - 用户下载但从未打开过的应用 | 极强限制 - 作业:从不运行 - 报警:从不触发 - 网络:从不连接 - FCM:从不接收 |
简单总结一下:应用待机群组根据应用的使用频率和活跃状态,将应用分为五个等级。常用的应用资源多,不常用的资源少,这样既能保证用户体验,又能节省电量,一举两得!