Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android M Doze状态本身有多个状态吗?_Android_Adb_Alarmmanager_Alarm_Android 6.0 Marshmallow - Fatal编程技术网

Android M Doze状态本身有多个状态吗?

Android M Doze状态本身有多个状态吗?,android,adb,alarmmanager,alarm,android-6.0-marshmallow,Android,Adb,Alarmmanager,Alarm,Android 6.0 Marshmallow,我稍微修改了这个应用程序: 它使用SetExactAndAllowHileId设置报警,并计划每1分钟发出一次报警并记录 根据Doze文档,如果此应用程序在手机处于Doze模式时运行,则每15分钟只应发出一次警报。我没有看到那种行为 在运行安卓M的Nexus5上。启动应用程序和整个警报调度过程后,我使用提供的abd命令将手机置于瞌睡状态 adb外壳转储系统电池拔出 adb外壳转储sys deviceidle步骤 adb外壳转储系统设备-h …从日志中,我看到大约30分钟的警报每分钟响一次,最后它

我稍微修改了这个应用程序:

它使用SetExactAndAllowHileId设置报警,并计划每1分钟发出一次报警并记录

根据Doze文档,如果此应用程序在手机处于Doze模式时运行,则每15分钟只应发出一次警报。我没有看到那种行为

在运行安卓M的Nexus5上。启动应用程序和整个警报调度过程后,我使用提供的abd命令将手机置于瞌睡状态

adb外壳转储系统电池拔出 adb外壳转储sys deviceidle步骤 adb外壳转储系统设备-h

…从日志中,我看到大约30分钟的警报每分钟响一次,最后它们相隔15分钟,持续约一小时。然后回到每分钟一次,然后回到15分钟间隔。在测试过程中,手机完全没有受到干扰

有人知道这是为什么吗?我的印象是,在adb发出这些命令后,手机会立即进入打瞌睡模式,并且闹钟会在启动前15分钟发出


感谢您的帮助。

首先,相关的adb命令文档不完整,如您在链接中所述

以下命令仅打印使用信息:

adb shell dumpsys deviceidle -h
以下命令将显示当前状态,包括进入怠速的先决条件(已启用、未移动、未充电、屏幕关闭):

adb shell dumpsys deviceidle

  Settings:
    ...
  Whitelist (except idle) system apps:
    ...
  Whitelist (except idle) all app ids:
    ...
  mEnabled=true
  mForceIdle=false
  mSigMotionSensor=null
  mCurDisplay=...
  mScreenOn=false
  mCharging=false
  mSigMotionActive=false
  mState=INACTIVE
这将显示是否需要执行更多设置。例如,似乎只需轻触模拟器的电源按钮2或3下即可获得
mScreenOn=false

以下命令逐步进入空闲模式,但说明您需要多次进入非活动、空闲、挂起、感测,然后进入空闲模式:

adb shell dumpsys deviceidle step
以下命令将强制其进入空闲状态:

adb shell dumpsys deviceidle force-idle

顺便说一句,上的开发者文档最近有所改进。

当设备处于空闲模式时,
设置ExactAndAllowHileId
的速率限制是不同的。我猜您的手机通过Doze进入空闲模式需要30分钟,此时您只能每15分钟呼叫一次
setExactAndAllowHileidle

在打瞌睡模式下,您的手机将在长达10分钟的空闲维护期内定期唤醒。在这10分钟内,它将从空闲模式唤醒,您的费率限制将调整为每分钟一次。在维护窗口结束后,您将看到它返回到每15分钟一次


文档中描述了空闲的维护窗口:

FWIW,我对这些命令不感兴趣,因为我不信任它们。我只是让设备在自身(断电)的情况下进入睡眠模式。不过,我不太确定您的每15分钟视频是从哪里来的,因为我在公共软件中找不到对“15”的引用。@commonware谢谢您重播。我没有把那部分解释清楚,我错了。在SetExactAndAllowHileidle方法的quick docs中指出:“根据我的经验,在正常系统操作下,不会超过大约每分钟发送一次这些警报(在这一点上,每个等待的警报都会被发送);在低功率空闲模式下,这一持续时间可能会明显更长,例如15分钟。”,在实际的打盹模式下,事件之间的间隔要长得多,从一个小时到几个小时不等。工作日志(下载文件)似乎相隔15分钟。然而,我现在看到,在下载中也有例外。直到间隔1分钟的日志再次启动。我相信这是一种空闲维护模式——下载在这里也能正常工作。不幸的是,空闲维护模式之间的间隔为2-4小时。有关DeviceIdleController、其状态及其命令的更多信息,请参阅。