android - 设备处于 sleep 状态时定期通知是否有效

标签 android service notifications

我正在使用 Android API,尤其是 Alarms、IntentService 和通知。我正在使用 AlarmManager 安排一个周期性的 IntentService,它可能会或可能不会触发通知。

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

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

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

最佳答案

What happens when the device is in sleep mode?

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

如果您的闹钟类型以 _WAKEUP 结尾,并且您正在使用广播 PendingIntent,设备将通过调用 onReceive( )BroadcastReceiver。一旦 onReceive() 返回,设备就可以再次进入休眠状态。这就是创建 WakefulIntentServiceWakefulBroadcastRecevier 的原因——为如何将控制权传递给 IntentService 并在服务完成其工作。

如果您的闹钟类型以 _WAKEUP 结尾并且您没有使用广播 PendingIntent,俗话说,您的里程可能会有所不同。在设备重新进入休眠状态之前,您可能无法控制。这不是推荐的模式。

如果您的闹钟类型不以_WAKEUP结尾,设备将不会因为您的闹钟而被唤醒。

关于 Notification,考虑到 API 的性质,我们希望操作系统有责任让设备保持足够长的唤醒时间以便播放铃声或振动模式,因为我们不知道 Notification 出现的确切时间,也不知道铃声是否会播放(例如,设备处于静音模式)。

关于android - 设备处于 sleep 状态时定期通知是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23608137/

相关文章:

php - Symfony 2.4 你请求了一个不存在的服务 "payment.encryption_service"

android - 实现应用内 Facebook 式通知

android - 通知中的媒体播放器控件

android - 将通知从一个应用程序发送到 Android 中另一台设备中的另一个应用程序

android - 未能应用插件 'com.android.internal.library' 。 Android Gradle 插件需要 Java 11 才能运行。您当前使用的是 Java 1.8

Android 编译错误 - 任务 ':app:kaptDebugKotlin' 执行失败

c# - 在 WCF (C#) 中引用服务时出现问题

java - 创建嵌入 IF 逻辑的文件

android - Android、iPhone 和 Web 上的多人游戏

使用安装项目安装时未显示 Windows 服务