1

我想每 10 分钟在后台执行一次数据库操作。最好的方法是什么?

也许:

  • 话题:怎么样?
  • 服务:很复杂?
  • AsyncTasks:周期太长

我目前的做法:

CountDownTimer clearDBsCountDownTimer = new CountDownTimer(600000, 600000) {
    @Override
    public void onFinish() {
        ClearDBs();
    }
};

private void ClearDBs() {
    // Clearing databases here
    clearDBsCountDownTimer.start();
}

但它不起作用:我认为是因为该ClearDBs()方法等待CountDownTimer完成,对吧?

但是如何正确地做到这一点:有什么想法吗?

4

2 回答 2

2

AlarmManager + IntentService 是最干净的方法。

使用 AlarmManager,您可以安排定期 IntentServices。

onHandleIntent()IntentService 是在后台线程(调用)中执行特定操作并终止的服务。

他们完美地组合在后台执行定期工作。

例如检查这篇文章

请小心此类操作,因为它们可能会导致电池耗尽(并使用户生气)。

正如@Squonk 所建议的,您可以使用setRepeating(...)setInexactRepeating(...)安排定期事件。

如果您只想在您的应用程序处于前台时执行此后台任务,您仍然可以取消事件调用manager.cancel()

于 2013-04-05T21:41:46.363 回答
2

创建绑定服务将是一个好主意。

对于线程使用ScheduledExecutorService

于 2013-04-05T22:03:37.673 回答