我想每10分钟在后台执行数据库操作。什么是最好的方法?
也许:
我目前的做法:
CountDownTimer clearDBsCountDownTimer = new CountDownTimer(600000, 600000) {
@Override
public void onFinish() {
ClearDBs();
}
};
private void ClearDBs() {
// Clearing databases here
clearDBsCountDownTimer.start();
}
但它不起作用:我认为因为ClearDBs()
方法等待CountDownTimer
完成,对吧?
但如何正确地做到这一点:任何想法?
答案 0 :(得分:2)
AlarmManager + IntentService是最干净的方法。
使用AlarmManager,您可以安排定期的IntentServices。
IntentService是一种在后台线程(onHandleIntent()
调用)中执行特定操作并死亡的服务。
他们完美地组合在后台执行定期工作。
检查例如this post。
请注意这种操作,因为它们可能导致电池耗尽(并且有愤怒的用户)。
根据@Squonk的建议,您可以使用setRepeating(...)
或setInexactRepeating(...)
来安排定期活动。
如果您只想在应用处于前台时执行此后台任务,您仍然可以取消调用manager.cancel()的事件
答案 1 :(得分:2)
创建bound service会是一个好主意。
对于线程使用ScheduledExecutorService