我有一个后台 Android 服务。它在后台运行,检查一些结果的 URL。如果结果发生变化,应用程序会向用户发送通知。我希望这项服务每 3 小时运行一次。我的问题是何时以及如何启动服务?
- 一般行为是创建广播接收器。
- 然后在接收方收到
ACTION_BOOT_COMPLETED
时启动服务。 - 此外,当接收器完成启动时,接收器将使用 AlarmManager 并创建每 3 小时运行一次的警报。
但是安装应用后,如果用户没有重启他/她的手机怎么办?如果用户没有启动,AlarmManager 将不会创建警报。
- 因此,另一种选择是在用户首次运行应用程序时创建警报。
- 如果用户重新启动应用程序会怎样?我是否应该使用
AlarmManager.cancel
取消所有以前的警报并重新创建警报?
那么您在什么情况下为您的 Android 应用程序设置警报?
最佳答案
您有两种方法来创建初始警报,一种是在应用程序首次启动时,另一种更好的方法是让另一个广播接收器监听 ACTION_MY_PACKAGE_REPLACED
。每当安装或更新应用程序时都会调用此方法,您可以在发生这种情况或重新启动时设置警报(因为重新启动会清除警报管理器中的警报)。然后每次服务运行时只需重置您的闹钟。
作为额外的提示,如果您还没有使用它们,请查看 Android WakeLock
文档。如果服务启动时没有设置唤醒锁,手机可能会在服务的 onStartCommand
之后立即进入休眠状态。即使您在服务中遇到某些错误情况(例如,网络连接丢失),也要确保重置警报。
编辑:有些人遇到过 ACTION_MY_PACKAGE_REPLACED
的问题。在这些情况下,可以使用 ACTION_PACKAGE_REPLACED
,只要代码检查它是被替换的正确包即可:ACTION_MY_PACKAGE_REPLACED not received
关于android - 使用 AlarmManager 和 Broadcast Receiver 启动 Android 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19643491/