设备处于睡眠状态时,定期通知是否有效

时间:2014-05-12 11:43:58

标签: android service notifications

我正在使用Android API,特别是Alarms,IntentService和通知。我正在使用AlarmManager来安排定期IntentService,这可能会或可能不会触发通知。

我的问题是当设备处于睡眠模式时会发生什么?

  1. 警报不会触发,因此IntentService根本不会运行。我不确定是否会出现这种情况。如果我将其设为WakefulIntentService,会不会有所作为?我相信需要唤醒锁才能确保在BroadCastReciever返回后服务保持运行。但是,在这种情况下,没有广播接收器。

  2. 警报和IntentService将运行,但任何通知都不会对设备休眠产生任何影响。在这种情况下,我是否必须从PowerManager明确获取唤醒锁才能触发通知?

1 个答案:

答案 0 :(得分:2)

  

设备处于睡眠模式时会发生什么?

这取决于您的警报类型以及PendingIntent要调用的组件。

如果您的警报类型以_WAKEUP结尾,并且您正在使用广播PendingIntent,则设备将通过onReceive() BroadcastReceiver的呼叫唤醒并保持唤醒状态}。一旦onReceive()返回,设备就会再次入睡。这就是创建WakefulIntentServiceWakefulBroadcastRecevier的原因 - 提供测试模式,了解如何将控制传递给IntentService并在服务完成其工作时保持设备唤醒。

如果您的警报类型以_WAKEUP结尾,并且您没有使用广播PendingIntent,那么您的里程可能会有所不同。在设备重新入睡之前,您可能无法获得控制权。这不是推荐的模式。

如果您的闹钟类型未在_WAKEUP中结束,则设备将因您的闹钟而无法唤醒。

关于Notification,鉴于API的性质,人们希望它是OS'有责任保持设备唤醒足够长的时间以播放铃声或振动模式,因为我们不知道Notification出现的确切时刻,也不知道铃声是否会播放(例如,设备处于静音状态)模式)。