简介
从Android 6.0(API level 23)开始,Android提出了两个延长电池使用时间的省电特性给用户。用户管理可以在没有充电的情况下管理app的行为。当用户一段时间没有使用手机的时候,Doze模式通过延缓app后台的CPU和网络活动减少电量的消耗。App Stanbdy延缓用户最近没有使用app的后台网络活动。
Doze和App Stanbdy管理所有在Android6.0+正在运行app的行为。
理解Doze模式
如果一个用户断开了充电连接,关屏不动手机一段时间之后,设备进入Doze模式。在Doze模式中,系统尝试去通过减少应用的网络访问和CPU敏感的服务来保护电池。它也阻止应用通过访问网络,并且延缓应用的任务、同步和标准alarms。
系统定期退出Doze模式(maintenance window)去让app完成他们被延缓的动作。在maintenance window期间,系统运行所有挂起的同步、任务和alarms,同时也能访问网络。
图一:Doze模式提供一个复发的maintenance window给app去使用网络和处理挂起的操作
在每个maintenance window完结时,系统会再次进入Doze模式,暂停网络接入和延缓操作、同步和alarms。随着时间的过去,当设备没有充电且长时间静止时系统调度maintenance window的次数越来越少,以此帮助减少电池消耗。
只要用户通过移动、点亮屏幕或则插上充电器唤醒设备的时候,系统会退出Doze模式,所有的app退回到正常活动状态。
Doze模式限制
Doze模式中的限制
l 网络接入被暂停
l 系统忽略wake locks
l 标准的AlarmManager alarms(包括setExact()和setWindow())被延缓到下一个maintenance window
n 如果你需要在Doze状态下启动设置的alarms,使用setAndAllowWhileIdle()或者setExactAndAllowWhileIdle()。
n 当有setAlarmClock()的alarms启动时,系统会短暂退出Doze模式
l 系统不会扫描Wi-Fi
l 系统不允许sync adapters运行
l 系统不允许JobScheduler运行