【问题标题】:Android: Scheduling applications for continued executionAndroid:调度应用程序以继续执行
【发布时间】:2014-11-29 09:06:17
【问题描述】:

我经历了各种讨论线程并尝试了多次迭代,以使我的应用程序计划以固定的时间间隔重复运行。我也成功了,但启动线程以了解事情是如何运作的。

我曾尝试使用 ScheduledExecutorService 和 TimerTask 实现,但两者都没有以正确的时间间隔触发我的任务。但是使用 AlarmManager 成功了。

请指引我正确的方向,以了解为什么 ScheduledExecutorService 和 TimerTask 的计时效果不佳。

应用需要定期执行任务。比如说,我的任务大约需要 5 分钟才能完成,我想让它按计划运行,以便每 30 分钟运行一次。当我用 ScheduledExecutorService 或 TimerTask 构建应用程序时,我发现它不会在 30 分钟触发任务,而是在 1 小时甚至更长时间触发。到目前为止,使用警报管理器,它似乎在 30 分钟左右触发时工作正常(仍然发现略有差异,但比其他两个更好)。

【问题讨论】:

  • 请完整、准确地解释“效果不佳”是什么意思。
  • @CommonsWare 已更新问题的详细信息。请看一看。

标签: android scheduled-tasks alarmmanager timertask scheduledexecutorservice


【解决方案1】:

当我用ScheduledExecutorService或TimerTask构建应用时,发现30分钟不触发任务,而是1小时甚至更长时间触发。

更重要的是,一旦您的进程终止,它根本不会触发,这可能发生在任何时候,从用户的角度来看,应该快速发生,以便为其他应用程序释放 RAM。

您的触发延迟可能是由于设备进入睡眠状态。您的解决方案不仅会占用用户的 RAM,而且还需要您防止设备进入睡眠状态,这对电池寿命很不利。

AlarmManager 是一个更合适的解决方案,因为它不需要您保持服务运行或以其他方式有一个进程。请务必使用WakefulBroadcastReceiver 作为您对_WAKEUP 事件的响应方式,因为设备会想要重新进入睡眠状态。

【讨论】:

  • 太棒了。您的回复帮助我得到了我真正想要的东西,甚至对 Android 系统有了更多的了解。我对 Android 很陌生,每一个技术术语都鼓励我去探索更多。 :)
猜你喜欢
  • 2015-01-21
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多