Android6.0引入了下列特性来延长电池使用时间:
* App Standby(应用待机)。系统可以将未使用的应用置为AppStandby模式,临时限制这些应用的网络访问,延迟同步和后台job
* Doze(瞌睡)。如果用户在某个时间期限内未主动使用设备(屏幕关闭、设备静止),平台将进入深度睡眠状态。因为该特性要求平台检测静止状态,因此只有那些在Sensor HAL中实现了显式移动检测API的设备中才有效。
* Exemptions(豁免)。预装在设备上的系统应用和云消息服务,默认通常被豁免。应用开发者可以要求其应用使用这种设定。用户也可以在设置中来豁免某些应用。
## AppStandby
对于不常用的应用的,AppStandby通过延迟后台网络活动和任务来延长电池寿命。
### 生命周期
**检测**:当设备不在充电时,且在某个特定时钟期限内和亮屏时长中,用户没有直接或者间接启动该应用。间接启动指的是:前台应用访问另外某个应用的service。
**App Standy模式中**:平台限制应用一天内最多访问一次网络,延迟其同步和其他后台任务。
**退出**:当应用被激活,或者设备充电时,平台将该应用移出App Standby状态。
活动的应用不受AppStandby的影响。活动的含义是:
* 进程处于前台(Activity 或者 前台服务,或者 由另外一个Activity 或 前台服务所使用),例如 notification listener,辅助服务,live 墙纸,等等
* 供用户查看的通知,可以是锁屏通知或者通知图标。
* 用户显式启动的应用。
## Doze
支持Doze功能的要求:
* 设备在Sensor HAL实现了significant motion detector (SMD) APIs 。
* 设备有某个云消息服务,如 Google Cloud Messaging (GCM)。这使得设备可以知道何时从Doze中唤醒。
### 生命周期
**检测**:当未在充电时,且当设备静止且灭屏了一段时间。
**Doze期间**: 平台尝试让系统处于休眠状态,周期性地进入在一个维持窗口恢复正常操作,然后进入更长的休眠状态。在休眠状态:
* 禁止网络访问
* 忽略 wakelock
* 延迟闹钟,除了闹铃 和使用setAndAllowWhileIdle()设置的闹钟,以荣喜日历等应用显示事件提醒
* 停止WIFI扫描
* 同步和后台任务被推迟到下一个维护窗口。
* 接收短信和MMS消息的应用位于一个临时白名单,这样他们可以完成其工作。
**退出**:
* 用户交互
* 设备移动
* 亮屏
* 闹铃
### 集成Doze
1. 确认设备支持 SENSOR_TYPE_SIGNIFICANT_MOTION .
2. 确认设备安装了一种云消息服务。????
3. 在配置文件overlay/frameworks/base/core/res/res/values/config.xml中,修改:bool name=”config_enableAutoPowerModes”>true
4. 检查装应用和服务:
1. Use the new power-saving optimization guidelines. For details, see Testing and optimizing applications.
2. OR,Are exempted from Doze and App Standby. For details, see Exempting applications.
5. 确认必要的服务从Doze中豁免。
## 豁免应用
你可以在设置中,手动将某些应用从Doze和AppStandby中排除。