【问题标题】:Android AlarmManager - ELAPSED_REALTIME alarm continues repeating when sleepAndroid AlarmManager - ELAPSED_REALTIME 闹钟在睡眠时继续重复
【发布时间】:2013-11-21 16:24:57
【问题描述】:

我在 Nexus 4 - Android 4.3 - api_18 上工作。

当我使用AlarmManager.ELAPSED_REALTIME 安排PendingIntent 时,当设备处于睡眠模式时,闹钟会继续呼叫我的BroadcastReceiver

文档说当设备进入睡眠状态时,BroadcastReceiver 只被调用一次,然后在设备唤醒时被调用:

如果它在设备睡眠时熄灭,它将不会被传递,直到 下次设备唤醒时。

在我的例子中,BroadcastReceiver 在设备处于睡眠状态时被重复调用。

我的代码

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, 
                          SystemClock.elapsedRealtime(), 
                          DELAI_PLANNIF_TICK, 
                          pendingIntent);

【问题讨论】:

  • 你怎么知道你的设备进入睡眠模式?
  • 嗨,好问题,我只用设备上的按钮关闭屏幕。当屏幕关闭并且我得到滴答声时,我测试: pm.isScreenOn() 并且它是错误的。我想设备处于睡眠模式呢?
  • 在睡眠模式下,CPU处于低功耗状态,因此不执行代码(可能会被警报唤醒),通常在屏幕关闭后几秒钟发生。
  • 嗨,好的,我会用 logcat 跟踪它,我会及时通知你。

标签: android alarmmanager android-alarms


【解决方案1】:

当您关闭屏幕时,Android 不会处于睡眠模式。它正在那里,这个过程可能需要几秒钟以上。某些应用程序可能会获得WakeLock 并在屏幕关闭时继续其任务(例如播放音频)。我的猜测是您的设备只是没有处于睡眠模式,而您BroadcastReceiver 的行为与预期的一样。如果您不使用PowerManager,那么您不必担心会阻止设备进入睡眠状态。如果您的应用需要在用户不与设备交互时停止执行,最好处理屏幕事件。

【讨论】:

  • 嗨,我已经测试了两个小时,我确认在终端进入睡眠状态(并且我已经验证它处于睡眠模式)后,BroadcastReceiver 会不断被调用。否则,处理屏幕关闭事件是一个不错的替代想法。
猜你喜欢
  • 2012-06-25
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多