ITmob-Ly
发布于 2022-09-02 / 430 阅读
0

使用命令模拟 Doze(低电耗)模式和 App Standby(应用待机)模式进行测试

Android 6.0 Marshmallow

从 Android 6.0(Marshmallow API level 23) 开始,Android 框架引入了两个省电功能 DozeApp 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>
    
  • 在唤醒应用后观察它的行为。确保应用从待机模式正常恢复。应特别检查应用的通知和后台操作是否继续按预期运行。