Android M(预览版)中的Doze模式和AlarmManager

6

我正在测试我们的Android应用在操作系统进入Doze模式时的行为。我使用运行Android API 23(修订版1)的模拟器来进行测试。 该应用程序通过AlarmManager启动服务,使用方法setInexactRepeating并设置类型为ELAPSED_REALTIME_WAKEUP。我设置了警报以每三分钟左右触发一次(仅用于测试目的)。经过多次尝试(官方指南非常不清楚),我成功地通过锁定模拟器屏幕和运行dumpsys建议的命令将模拟器置于IDLE状态。 当设备处于IDLE状态时,我仍然能够看到闹钟启动的服务。 这不应该是预期的行为。我原本期望闹钟会停止。 这是一个bug吗?还是我漏掉了什么?


1
这是与模拟器相关的问题。在真实设备上,闹钟会在IDLE期间停止,正如文档所述。 - Francesco Mameli
1个回答

1

用以下代码进行测试。

adb shell dumpsys deviceidle enable 
adb shell dumpsys battery unplug
adb shell dumpsys deviceidle step
adb shell dumpsys deviceidle force-idle

使用setAndAllowWhileIdle来强制唤醒智能手机。

在我的情况下,我使用了这个:

if (android.os.Build.VERSION.SDK_INT > 22) {
   am.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
} else {
   am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, sender);
}

我认为预期的情况是停止警报。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接