我正在使用 Android API,尤其是 Alarms、IntentService 和通知。我正在使用 AlarmManager
安排一个周期性的 IntentService
,它可能会或可能不会触发通知。
我的问题是当设备处于 sleep 模式时会发生什么?
警报不会触发,因此
IntentService
根本不会运行。我不确定是否会出现这种情况。如果我将其设为 WakefulIntentService 会有什么不同吗?我相信需要唤醒锁来确保服务在 BroadCastReciever 返回后继续运行。但是,在这种情况下没有广播接收器。Alarm 和 IntentService 将运行,但任何通知都不会产生任何影响,因为设备正在休眠。在这种情况下,我是否必须明确地从 PowerManager 获取唤醒锁才能触发通知?
最佳答案
What happens when the device is in sleep mode?
这取决于您的警报类型和您的 PendingIntent
要调用的组件。
如果您的闹钟类型以 _WAKEUP
结尾,并且您正在使用广播 PendingIntent
,设备将通过调用 onReceive( )
的 BroadcastReceiver
。一旦 onReceive()
返回,设备就可以再次进入休眠状态。这就是创建 WakefulIntentService
和 WakefulBroadcastRecevier
的原因——为如何将控制权传递给 IntentService
并在服务完成其工作。
如果您的闹钟类型以 _WAKEUP
结尾并且您没有使用广播 PendingIntent
,俗话说,您的里程可能会有所不同。在设备重新进入休眠状态之前,您可能无法控制。这不是推荐的模式。
如果您的闹钟类型不以_WAKEUP
结尾,设备将不会因为您的闹钟而被唤醒。
关于 Notification
,考虑到 API 的性质,我们希望操作系统有责任让设备保持足够长的唤醒时间以便播放铃声或振动模式,因为我们不知道 Notification
出现的确切时间,也不知道铃声是否会播放(例如,设备处于静音模式)。
关于android - 设备处于 sleep 状态时定期通知是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23608137/