1

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

  • 一般行为是创建一个广播接收器。
  • 然后在接收者得到一个ACTION_BOOT_COMPLETED.
  • 此外,当接收器完成启动时,接收器将使用 AlarmManager 并创建一个警报,每 3 小时运行一次。

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

  • 所以另一个选择是在用户第一次运行应用程序时创建警报。
  • 如果用户重新启动应用程序怎么办?我应该取消所有以前AlarmManager.cancel的警报并重新创建警报吗?

那么,您在哪些条件下为您的 Android 应用程序设置警报呢?

4

1 回答 1

1

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

作为附加提示,WakeLock如果您还没有使用它们,请查看 Android 文档。如果服务启动时不设置唤醒锁,手机可能会在服务启动后立即进入睡眠状态onStartCommand。并确保即使您在服务中遇到一些错误情况(例如缺少网络连接),也已完成警报重置。

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

于 2013-10-28T20:19:31.940 回答