Andriod后台限制汇总
从Android开发者网站上,目前看到4种限制机制,分别是低电耗模式,应用待机模式,应用待机分组和省电模式。本文对这些后台限制模式进行简单的汇总。
该文章的内容均来自于Android开发者网站。对于这些限制,本人没有全部实际测试,只是为了记录。
此外,每个手机厂商可能会定制一些自己的逻辑,所以可能和Android开发者网站的描述可能不一致。
低电耗模式
低电耗模式就是doze模式。Android开发者网站对低电耗模式的描述如下:
如果用户未插接设备的电源,在屏幕关闭的情况下,让设备在一段时间内保持不活动状态,那么设备就会进入低电耗模式。在低电耗模式下,系统会尝试通过限制应用访问占用大量网络和 CPU 资源的服务来节省电量。它还会阻止应用访问网络,并延迟其作业、同步和标准闹钟。
系统会定期退出低电耗模式一小段时间,让应用完成其延迟的活动。在此维护期内,系统会运行所有待处理的同步、作业和闹钟,并允许应用访问网络。
限制:
暂停访问网络
忽略wakelock
推迟Alarm
不执行 WLAN 扫描
不运行SyncAdapter
不运行JobScheduler
命令:
adb shell dumpsys deviceidle force-idle
adb shell dumpsys deviceidle unforce
adb shell dumpsys battery reset
应用待机模式
应用待机模式允许系统判定应用在用户未主动使用它时是否处于闲置状态。当用户有一段时间未触摸应用时,系统便会作出此判定,以下条件均不适用:
用户正在打开应用
应用有一个前台进程
应用存在通知(锁屏通知或通知栏通知)
应用是设备管理器
命令:
adb shell dumpsys battery unplug
adb shell am set-inactive <packageName> true
adb shell am set-inactive <packageName> false
adb shell am get-inactive <packageName>
应用待机分组
Android 9 引入了一项新的电池管理功能,即应用待机群组。 应用待机群组可以基于应用最近使用时间和使用频率,帮助系统排定应用请求资源的优先级。 根据使用模式,每个应用都会归类到五个优先级群组之一中。 系统将根据应用所属的群组限制每个应用可以访问的设备资源。
五个群组按照以下特性将应用分组:
活跃
工作集
常用
极少使用(系统会限制应用连接到网络的能力)
从未使用
API:
UsageStatsManager.getAppStandbyBucket()
命令:
adb shell am set-standby-bucket packagename active|working_set|frequent|rare
adb shell am set-standby-bucket package1 bucket1 package2 bucket2...
adb shell am get-standby-bucket [packagename]
省电模式
Android 9 对省电模式进行了多处改进。 设备制造商可以决定施加的确切限制。 例如,在 AOSP 构建中,系统会应用以下限制:
系统会更积极地将应用置于应用待机模式,而不是等待应用空闲。
后台执行限制适用于所有应用,无论它们的目标 API 级别如何。
当屏幕关闭时,位置服务可能会被停用。
后台应用没有网络访问权限。
命令:
adb shell dumpsys battery unplug
adb shell settings put global low_power 1
adb shell dumpsys battery reset
参考