从Android6.0(API23)开始, Google为Android加入了两种省电特性,通过管理Android应用(以下简称应用)在非充电状态下的设备中的运行策略来达到延长用户的Android设备使用时间的目的。这两种特性存在一定的差别,Doze模式通过延缓应用在设备长时间待机状态下对于CPU和网络资源的使用来实现节能;而App Standby则是通过延缓最近未被使用的后台应用对于网络的请求来达到同样的目的。
Doze和App Standby在Android6.0及以上的Android设备中可以影响所有运行状态下的Android应用,无论这些应用的Target API是否是指定为API23。为了确保用户获得在不同Android版本下的应用体验一致性,开发者需要对应用在Doze及App Standby模式下做相应的适配。
Doze初体验
用户的Android设备处于未充电状态,静止且屏幕关闭一段时间之后,Android系统就会自动进入Doze模式。在Doze模式下,Android系统将会通过限制后台应用对CPU密集型服务以及网络的使用来减少电量消耗。此外,Android系统还会推迟后台应用的Jobs、Syncs和Alarms等操作。
正常情况下,Android系统会周期性的退出Doze模式然后执行之前推迟的应用活动。Android系统退出Doze模式的这个短暂期被称作“维护窗口”。在这个较短的维护窗口期间,系统将会恢复所有Doze模式中推迟的Syncs、Jobs和Alarms等操作,并短暂开放后台应用对于网络的访问权限。

Figure 1. Doze模式为应用提供了一个周期性的可供应用使用网络以完成被推迟任务的维护窗口
在维护窗口的末期,Android系统又会重新进入Doze模式,并再度暂停所有的Jobs、Syncs和Alarms等操作的执行。系统会在多次进入和退出Doze模式之后智能调整时间段,最后显著降低退出Doze模式的频率,为长时间处于未充电状态且没有活动的Android设备最大限度保存电量。
在用户通过移动、点亮屏幕或者连接充电器唤醒Android设备之后,系统将会自动退出Doze模式并恢复应用到正常的工作状态。
Doze模式下的限制
Android应用处于Doze模式下时会受到以下限制:
1.网络访问被挂起
2.Wake Locks被无视
3.AlarmManager创建的Alarms将被推迟到下一个维护窗口,通过setAndAllowWhileIdle()以及setExactAndAllowWhileIdle()设置的Alarms将会在Doze模式下正常执行,同时通过setAlarmClock()设置的Alarms也会正常执行—Android系统将会在设定时间之前自动退出Doze模式
4.Android系统将会停止执行Wi-Fi的扫描
5.Android系统将会停止Sync Adapter的同步操作
6.Android系统也会停止JobScheduler的定时操作

本文详细介绍了Android 6.0引入的Doze和AppStandby两种电量管理模式,旨在延长设备使用时间。Doze模式通过限制后台应用的CPU和网络使用,AppStandby则是通过限制未使用的后台应用网络请求。开发者需要针对这两种模式进行应用适配,确保在低电耗状态下仍能正常运行。测试方法包括使用adb命令模拟Doze和AppStandby模式,确保应用在这些模式下能平滑恢复和正常运行。同时,文章提到了GCM在低电耗模式下的重要性,以及应用如何申请进入白名单以避免电量管理限制。
最低0.47元/天 解锁文章
2083





