使用AlarmManager和Broadcast Receiver启动Android服务

时间:2013-10-28 19:31:16

标签: android service alarmmanager

我有一个后台Android服务。它在后台运行,检查URL以获取某些结果。如果结果发生变化,app会向用户发送通知。我希望这项服务每3小时运行一次。我的问题是何时以及如何启动服务?

  • 一般行为是创建广播接收器。
  • 然后当接收者获得ACTION_BOOT_COMPLETED时开始服务。
  • 当接收器完成启动时,接收器将使用AlarmManager并创建一个每3小时运行一次的警报。

但是在安装应用程序之后,如果用户没有重启他/她的手机怎么办?如果用户未启动,AlarmManager将不会创建警报。

  • 因此,另一个选项是在用户首次运行应用程序时创建警报。
  • 如果用户重新启动应用程序怎么办?我是否应该使用AlarmManager.cancel取消所有先前的闹钟并重新创建闹钟?

那么您在哪些情况下为Android应用程序设置警报?

1 个答案:

答案 0 :(得分:1)

有两种方法可以创建初始警报,无论是第一次启动应用程序,还是更好,让另一个广播接收器监听ACTION_MY_PACKAGE_REPLACED。无论何时安装或更新应用程序,都会调用此方法,并且可以在发生或重新启动时设置警报(因为重新启动会清除警报管理器的警报)。然后只需在每次服务运行时重置警报。

作为附加提示,请检查Android WakeLock文档,以防您尚未使用它们。在服务启动时未设置唤醒锁定,手机可能会在服务onStartCommand之后立即进入睡眠状态。并确保即使您在服务中遇到某些错误情况(例如,缺少网络连接),也会重置警报。

编辑:有些人遇到了ACTION_MY_PACKAGE_REPLACED的问题。在这些情况下,只要代码检查它是被替换的正确包,就可以使用ACTION_PACKAGE_REPLACEDACTION_MY_PACKAGE_REPLACED not received