android - Android M Doze 状态本身是否有多个状态?

标签 android adb alarmmanager alarm android-6.0-marshmallow

我稍微修改了这个应用程序:https://github.com/commonsguy/cw-omnibus/tree/master/JobScheduler

它使用 setExactAndAllowWhileIdle 设置警报并安排警报每 1 分钟响起并记录。

根据 Doze 文档,如果此应用在手机处于 Doze 模式时运行,则每 15 分钟只能响一次闹钟。我没有看到这种行为。

在运行 Android M 的 nexus 5 上。启动应用程序和整个闹钟调度过程后,我使用提供的 abd 命令将手机置于 Doze 状态...

adb shell dumpsys 电池拔出 adb shell dumpsys deviceidle 步骤 adb shell dumpsys deviceidle -h

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

有人知道这是为什么吗?我的印象是手机会在这些 adb 命令后立即进入打盹模式,并且警报会在开始后 15 分钟后响起。

感谢您的帮助。

最佳答案

一方面,相关的 adb 命令文档不完整,正如您在 ISSUE 2930 的链接中指出的那样.

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

adb shell dumpsys deviceidle -h

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

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

以下命令进入 IDLE 模式,但是 ISSUE 2930说明您需要多次执行步骤才能进入 INACTIVE、IDLE_PENDING、SENSING,然后是 IDLE:

adb shell dumpsys deviceidle step

以下命令将强制它进入空闲状态:

adb shell dumpsys deviceidle force-idle

顺便说一句,开发者文档在 Doze and App Standby 上最近有所改进。

关于android - Android M Doze 状态本身是否有多个状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31999618/

相关文章:

android - TextView 设置文本问题

java - 带有比较器的Android排序 ListView 不起作用

android - Notification.Builder setTicker 在 Android 5 及更高版本中仍然有用吗?

android - 无法使用 ADB : Error Cannot connect to 127. 0.0.1 在 Hyper-V 虚拟机上调试 android 应用程序

android - 具有 2 个未决 Intent 的警报管理器只有 1 个有效?

android - 使用警报管理器安排通知

java - 我们可以在移动到android中的下一次迭代之前制作一个for循环以在每次迭代中获取用户输入吗

android - 将 build.prop 推送到/system/build.prop

android - 在应用程序外部显示模态消息并在一段时间后自行关闭

java - 在 Intellij IDEA 中使用 android.support.v4 库