从 Android 6.0(Marshmallow API level 23) 开始,Android 框架引入了两个省电功能 Doze
和 App Standby
,通过管理设备未连接到电源时应用程序的行为来延长用户的电池寿命。
1. 模拟 Doze(低电耗模式)测试应用
模拟 IDLE 模式
-
使用 Android 6.0(API leve 23)或更高版本的设备或虚拟机
-
模拟未充电状态
# 查看一下手机当前的状态(USB powered: true 表示是充电状态)
$ adb shell dumpsys battery
Current Battery Service state:
mBootCompleted: true
AC powered: false
USB powered: true
Wireless powered: false
Max charging current: 0
Max charging voltage: 0
Charge counter: 0
...
# 模拟手机未充电状态
$ adb shell dumpsys battery unplug
# 再次查看手机当前的状态(AC powered 和 USB powered 都是 false 已经关闭)
$ adb shell dumpsys battery
Current Battery Service state:
(UPDATES STOPPED -- use 'reset' to restart)
mBootCompleted: true
AC powered: false
USB powered: false
Wireless powered: false
Max charging current: 0
Max charging voltage: 0
Charge counter: 0
...
-
保证 IDLE 设置为 enable 状态
# 查看 IDLE 的状态
$ adb shell dumpsys deviceidle
...
mLightEnabled=false mDeepEnabled=false
mForceIdle=false
mMotionSensor={Sensor name=
...
# 如果 mLightEnabled=false mDeepEnabled=false 执行下面的 enable 操作
$ adb shell dumpsys deviceidle enable
Deep idle mode enabled
Light idle mode enable
# 再次查看 IDLE 状态
$ adb shell dumpsysy deviceidle
...
mLightEnabled=true mDeepEnabled=true
mForceIdle=false
mMotionSensor={Sensor name=
...
-
运行以下命令,强制系统进入 IDLE 模式:
# 强制进入 IDLE 有两种方法
# 方法一:(多次执行 step 操作,直至进入 IDLE 模式)
$ adb shell dumpsys deviceidle step
Stepped to deep: ACTIVE
# 方法二:
$ adb shell dumpsys deviceidle force-idle
Now forced in to deep idle mode
-
查看是否进入 IDLE 模式
$ adb shell dumpsys deviceidle
...
mLightEnabled=true mDeepEnabled=true
mForceIdle=true
...
mNotMoving=false
mLocating=false mHasGps=true mHasNetwork=false mLocated=false
mState=IDLE mLightState=OVERRIDE
mInactiveTimeout=+30m0s0ms
...
# mForceIdle=true 和 mState=IDLE
退出 IDLE 恢复手机状态
-
运行以下命令,使系统退出 IDLE 模式
$ adb shell dumpsys deviceidle disable
Deep idle mode disabled
Light idle mode disabled
$ adb shell dumpsys deviceidle unforce
Light state: ACTIVE, deep state: ACTIVE
-
重新激活设备
adb shell dumpsys battery reset
查看 battery 和 IDLE 的状态
$ adb shell dumpsys battery
Current Battery Service state:
(UPDATES STOPPED -- use 'reset' to restart)
mBootCompleted: true
AC powered: false
USB powered: true
Wireless powered: false
...
$ adb shell dumpsys deviceidle
...
mLightEnabled=false mDeepEnabled=false
mForceIdle=false
mMotionSensor={Sensor name=
...
mNotMoving=false
mLocating=false mHasGps=true mHasNetwork=false mLocated=false
mState=ACTIVE mLightState=ACTIVE
mInactiveTimeout=+30m0s0ms
...
2. 模拟 App Standby(应用待机)模式测试应用
-
使用 Android 6.0(API leve 23)或更高版本的设备或虚拟机
-
运行以下命令,强制应用进入应用待机模式:
$ 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>
-
在唤醒应用后观察它的行为。确保应用从待机模式正常恢复。应特别检查应用的通知和后台操作是否继续按预期运行。