我正在使用Android API,特别是Alarms,IntentService和通知。我正在使用AlarmManager
来安排定期IntentService
,这可能会或可能不会触发通知。
我的问题是当设备处于睡眠模式时会发生什么?
警报不会触发,因此IntentService
根本不会运行。我不确定是否会出现这种情况。如果我将其设为WakefulIntentService,会不会有所作为?我相信需要唤醒锁才能确保在BroadCastReciever返回后服务保持运行。但是,在这种情况下,没有广播接收器。
警报和IntentService将运行,但任何通知都不会对设备休眠产生任何影响。在这种情况下,我是否必须从PowerManager明确获取唤醒锁才能触发通知?
答案 0 :(得分:2)
设备处于睡眠模式时会发生什么?
这取决于您的警报类型以及PendingIntent
要调用的组件。
如果您的警报类型以_WAKEUP
结尾,并且您正在使用广播PendingIntent
,则设备将通过onReceive()
BroadcastReceiver
的呼叫唤醒并保持唤醒状态}。一旦onReceive()
返回,设备就会再次入睡。这就是创建WakefulIntentService
和WakefulBroadcastRecevier
的原因 - 提供测试模式,了解如何将控制传递给IntentService
并在服务完成其工作时保持设备唤醒。
如果您的警报类型以_WAKEUP
结尾,并且您没有使用广播PendingIntent
,那么您的里程可能会有所不同。在设备重新入睡之前,您可能无法获得控制权。这不是推荐的模式。
如果您的闹钟类型未在_WAKEUP
中结束,则设备将因您的闹钟而无法唤醒。
关于Notification
,鉴于API的性质,人们希望它是OS'有责任保持设备唤醒足够长的时间以播放铃声或振动模式,因为我们不知道Notification
出现的确切时刻,也不知道铃声是否会播放(例如,设备处于静音状态)模式)。