我有一个后台Android服务。它在后台运行,检查URL以获取某些结果。如果结果发生变化,app会向用户发送通知。我希望这项服务每3小时运行一次。我的问题是何时以及如何启动服务?
ACTION_BOOT_COMPLETED
时开始服务。 但是在安装应用程序之后,如果用户没有重启他/她的手机怎么办?如果用户未启动,AlarmManager将不会创建警报。
AlarmManager.cancel
取消所有先前的闹钟并重新创建闹钟?那么您在哪些情况下为Android应用程序设置警报?
答案 0 :(得分:1)
有两种方法可以创建初始警报,无论是第一次启动应用程序,还是更好,让另一个广播接收器监听ACTION_MY_PACKAGE_REPLACED
。无论何时安装或更新应用程序,都会调用此方法,并且可以在发生或重新启动时设置警报(因为重新启动会清除警报管理器的警报)。然后只需在每次服务运行时重置警报。
作为附加提示,请检查Android WakeLock
文档,以防您尚未使用它们。在服务启动时未设置唤醒锁定,手机可能会在服务onStartCommand
之后立即进入睡眠状态。并确保即使您在服务中遇到某些错误情况(例如,缺少网络连接),也会重置警报。
编辑:有些人遇到了ACTION_MY_PACKAGE_REPLACED
的问题。在这些情况下,只要代码检查它是被替换的正确包,就可以使用ACTION_PACKAGE_REPLACED
:ACTION_MY_PACKAGE_REPLACED not received