Andoird6.0(API 23) 开始,Android 引入两项省电功能,通过管理应用在设备未连接至电源时的行为方式,帮助用户延长电池使用寿命。当用户长时间未使用设备时,低功耗会延迟应用的后台CPU和网络活动,从而降低耗电量。应用待机模式会延迟用户近期未与之交互应用的后台网络活动。
低功耗模式
如果用户未连接电源,在屏幕关闭的情况下,让设备在一段时间内保持不活动的状态,那么设备就会进入低耗电模式。在低耗电模式下,系统会尝试通过限制应用访问占用大量网络和CPU资源的服务来节省电量。它还会阻止应用访问网络,并延长其作业、同步和标准闹钟。
系统会定期退出低耗电模式一小段时间,让应用完成其延迟的活动。在此维护期内,系统会运行所有待处理的同步、作业和闹钟,并允许应用访问网络。
在每个维护期结束时,系统会再次进入低耗电模式,暂停网络访问并推迟作业、同步和闹钟。随着时间的推移,系统安排维护期的次数越来越少,这有助于在设备未连接电源的情况下长期处于不活动状态时降低电量。
低电耗模式提供了周期性维护期,让应用使用网络并处理待处理的活动。一旦用户打开屏幕或连接电源唤醒设备,系统就会立即退出低耗电模式,并且所有应用都会恢复正常活动。
低耗电模式限制
暂停网络访问
系统忽略唤醒锁定
标准AlarmManager闹钟(包括setExact()、setWindow())推迟到下一个维护期。
如果需要设置设备在低电耗模式时触发闹钟,请使用setAndAllowIdle()、setExactAndAllowIdle()。
使用setAlarmClock()设置的闹钟将继续正常触发,系统会在这些闹钟触发之前不久退出低耗电模式。
系统不允许执行WLAN扫描
系统不允许运行同步适配器
系统不允许运行JobSchedular
低耗电对网络访问的限制也有可能影响应用,特别是通知等实时性的消息影响更多。推荐使用FCM(Firebase)
应用待机模式
应用待机模式允许系统判定应用在用户未主动使用它时是否处于闲置状态。当用户有一段时间未触摸应用时,系统便会作出次判断,以下条件均不适用:
用户明确启动的应用
应用当前有一个进程在前台运行(作为活动或前台服务,或者正在由其他活动或前台服务使用)
应用生成用户可在锁定屏幕或通知栏中看到的通知
应用时正在使用中的设备管理应用。
当用户插入电源的时候,系统将会从待机中释放应用,允许他们自由访问网络并执行工作。如果设备长时间处于闲置状态,系统允许闲置的应用访问网络,频率大约是一天一次。
在应用待机模式或低电耗模式下测试应用
低电耗下进行测试
强制系统进入低电耗模式
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>
在应用唤醒后观察它的行为,确保应用从待机模式正常恢复。
网友评论