2

我注意到 Android 上的警报有一件奇怪的事情——它们并不总是以正确的时间间隔唤醒设备。例如,如果我将闹钟设置为每 5 分钟启动一次服务(使用 RTC_WAKEUP 或类似方法),则一切正常,直到设备进入睡眠状态 - 之后,闹钟可能不会在几分钟或近一个小时内触发。它通常最终会触发 - 如果我通过按菜单唤醒设备,它总是会触发。使用重复警报(相对于每次重新设置警报)具有相同的效果。

所以我的问题是,当设备处于睡眠状态时,是否可以保证以适当的时间间隔发出警报?我知道我不应该期望毫秒或秒精度,而是几十分钟?

4

2 回答 2

7

我从来没有在 Android 上编程过,但我有点无聊,所以我四处搜索发现这个,这似乎非常相关:http ://groups.google.com/group/android-developers/browse_thread/thread/f0303a539de3a74a (你'将需要登录到您的谷歌帐户才能阅读)

我又查看了 AlarmManager 文档,我注意到它只讨论使用警报来广播事件,而不是启动服务。按照 AlarmClock 应用程序的示例,我改变了使用 BroadcastReceiver 而不是在其 onReceive() 中获取锁并将锁引用存储为另一个类的静态成员: https ://android.googlesource.com/platform /packages/apps/AlarmClock

这似乎奏效了。我猜发生的事情是我的服务启动警报被触发,但设备有时会在我获得唤醒锁之前重新进入睡眠状态。显然,收到警报时唯一的保证是 onReceive 将运行到完成。

我只是想我会发布这个,以防有人在寻找同样的问题。

于 2009-11-23T20:08:09.153 回答
3

您还应该查看:http: //developer.android.com/reference/android/app/AlarmManager.html

此外,当设备处于睡眠状态时,您的程序已经调用了 OnPause(),因此此时只有服务正在运行。这意味着除非您的广播接收器设置为具有唤醒锁定 - 它在文档中建议的方式 - 原始服务调用不会维持设备的唤醒状态。

于 2009-11-25T17:20:59.760 回答