#####笔记##### Android P新特性---应用待机群组

简介
9 引入了一项新的电池管理功能,即应用待机群组 。通过在原有的App功能中增加新的管理组( &set)实现 。应用待机群组可以基于应用最近使用时间和使用频率,帮助系统排定应用请求资源的优先级 。根据使用模式,每个应用都会归类到五个优先级群组之一中 。系统将根据应用所属的群组限制每个应用可以访问的设备资源 。
关于分组
五个群组按照以下特性将应用分组:
活跃()
如果用户当前正在使用的应用满足以下任意一个条件,应用将被归到“活跃()”群组中,例如:
?应用已启动一个
【#####笔记#####Android P新特性---应用待机群组】?应用正在运行前台服务
?前台应用使用的应用
?用户在应用中点击了某个通知
?账户同步服务运行中
如果应用处于“活跃”群组,系统不会对应用的作业、报警或 FCM 消息施加任何限制 。
工作集( Set)
如果应用经常运行,但当前未处于活跃状态,它将被归到“工作集”群组中 。例如,用户在大部分时间都启动的某个社交媒体应用可能就属于“工作集”群组 。如果应用被间接使用,它们也会被升级到“工作集”群组中。
如果应用处于“工作集”群组,系统会对它运行作业和触发报警的能力施加轻度限制 。
常用()
如果应用会定期使用,但不是每天都必须使用,它将被归到“常用”群组中 。例如,用户在健身房运行的某个锻炼跟踪应用可能就属于“常用”群组 。
如果应用处于“常用”群组,系统将对它运行作业和触发报警的能力施加较强的限制,也会对高优先级 FCM 消息的数量设定限制 。
极少使用(Rare)
如果应用不经常使用,那么它属于“极少使用”群组 。例如,用户仅在入住酒店期间运行的酒店应用就可能属于“极少使用”群组 。
如果应用处于“极少使用”群组,系统将对它运行作业、触发警报和接收高优先级 FCM 消息的能力施加严格限制 。系统还会限制应用连接到网络的能力 。
从未使用(Never)
安装但是从未运行过的应用会被归到“从未使用”群组中 。系统会对这些应用施加极强的限制 。
关于运行时分组调整
简单区分为应用在待机群组中优先级的被动上调、被动下调和主动调整:
1.上调
A> 用户点击查看通知(u-ns)、点击通知(u-ui);
B> 用户切换应用时(u-mf、u-mb);
C> 正在提供系统更新服务的应用(u-su);

#####笔记#####  Android P新特性---应用待机群组

文章插图
D>被绑定(u-sa);
E> 启动(u-si);
F> 账户同步服务启动,根据设备是否Idle模式判断分组(u-en、u-ed)
G> 服务上报的事件(u-lp、u-lv)
片段1(A、B、E、G):
void reportEvent(UsageEvents.Event event, long elapsedRealtime, int userId) {if (!mAppIdleEnabled) return;........if ((event.mEventType == UsageEvents.Event.MOVE_TO_FOREGROUND|| event.mEventType == UsageEvents.Event.MOVE_TO_BACKGROUND|| event.mEventType == UsageEvents.Event.SYSTEM_INTERACTION|| event.mEventType == UsageEvents.Event.USER_INTERACTION|| event.mEventType == UsageEvents.Event.NOTIFICATION_SEEN|| event.mEventType == UsageEvents.Event.SLICE_PINNED|| event.mEventType == UsageEvents.Event.SLICE_PINNED_PRIV)) {........}
片段2(C):
void initializeDefaultsForSystemApps(int userId) {..............// past usage pattern was.mAppIdleHistory.reportUsage(packageName, userId, STANDBY_BUCKET_ACTIVE,REASON_SUB_USAGE_SYSTEM_UPDATE, 0,elapsedRealtime + mSystemUpdateUsageTimeoutMillis);}
片段3(D):