【问题标题】:Reliable repeating background task on android在android上可靠的重复后台任务
【发布时间】:2009-08-31 07:52:51
【问题描述】:

我正在尝试为一个 Android 应用程序运行每分钟左右运行一次的后台任务,但我正在努力确保该任务实际上每分钟运行一次。我尝试了多种方法,从使用 SystemClock.sleep() 到 AlarmManager(重复警报和固定警报),但似乎除非设备正在充电,否则任何类型的重复系统在设备启动后具有可变的重复率拔下电源。有什么方法可以运行稳定的持续重复服务?

【问题讨论】:

  • 你试过AlarmManager服务吗?

标签: android


【解决方案1】:

你实现Timer了吗?它非常适合我使用它的目的,但话又说回来,我根本不担心精度。据我所知,它可能会有所不同,但我对此表示怀疑。这对我来说似乎很一致。

编辑:对于您负责任或不负责任地使用此设施,我概不负责;)

【讨论】:

  • 我不太清楚为什么我们的两个答案都值得一票否决。
  • 特别是因为它们都与问题非常相关。
  • 定时器不会阻止睡眠,如果手机空闲,则意味着激活间隔远大于一分钟。
【解决方案2】:

如果您需要每分钟运行一次的服务,那么您有两种选择:

  • 使用 AlarmManager.setRepeating(RTC_WAKEUP, ...)。在这种情况下,手机会休眠,但手机内部的 RTC 会每分钟唤醒一次以处理重复事件。这会起作用,但不会非常准确,因为手机唤醒后会发生很多事情,因此您的代码可能无法立即获得执行时间。

  • 从 PowerManager 获取 WakeLock 并使用任何您想为代码计时的东西(定时器、处理程序等)。这会强制手机永不休眠,这意味着它很可能几乎完全在您请求时免费运行您的代码。

这两种方法肯定会快速耗尽手机的电池。通常情况下,手机在两次唤醒之间可以睡 4 分钟甚至 9 分钟,因此每分钟唤醒一次是一个很大的变化。

【讨论】:

    猜你喜欢
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多