【问题标题】:Android alarm manager pending intent when app is closed关闭应用程序时的Android警报管理器挂起意图
【发布时间】:2014-10-20 07:31:33
【问题描述】:

我正在使用警报管理器来设置待处理的意图,因此即使应用程序关闭,我的代码也会执行

manager.setRepeating(AlarmManager.RTC, System.currentTimeMillis() + interval, interval, pendingIntent);

问题是它在应用程序打开时也可以工作,我需要将其配置为仅在应用程序关闭时工作。有没有办法通过警报管理器或活动来配置它?

【问题讨论】:

  • 您是使用清单一还是手动代码一的哪个广播接收器?
  • 应用程序关闭时警报管理器不起作用。您需要为此使用 STICKY SERVICE,它将在后台运行...
  • 为此创建后台服务并检查您的活动是否在前面而不是执行您的代码..
  • @NaveedAli 这就是我目前的做法,我的后台任务在每个时间间隔都会被触发,我检查应用程序是否正在运行,但我认为如果应用程序正在运行,有办法避免运行后台活动打开

标签: java android


【解决方案1】:

警报在您的应用程序范围之外运行,因此如果您不再需要它们,您需要手动取消它们。您可以使用AlarmManagercancel() 方法来完成此操作。 不幸的是,我认为没有一种简单的方法可以了解您的应用程序是否正在关闭。途中可能正在使用ActivityLifecycleCallbacks。检查this answer 了解更多信息。你可以在那里阅读

只需检查停止活动的数量是否等于数量 的开始活动。如果它们相等,则您的应用程序正在 后台

此时您可以设置闹钟。 反之

如果有更多已启动的活动,您的应用程序仍然 可见的。如果恢复的活动多于暂停的活动,您的 应用程序不仅可见,而且还在前台

在这种情况下,您可以使用AlarmManagercancel() 方法。 请记住,只要设备重新启动,所有警报都会取消。

【讨论】:

  • 说得好 mavi。实际上,当机器重新启动时,与应用程序对齐的后台服务会停止,直到它再次启动。 @Edgar:“如果应用程序打开,则避免运行后台活动”-检查服务上的应用程序 is_running,如果它正在运行,则不要执行任务。
猜你喜欢
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多