如何在 Android 以固定比率开始操作?
How to start action at a fixed rate on Android?
我的 Android 应用程序中有一项服务必须每 5 分钟执行一次操作。
为了实现这一点,我尝试通过 Timer.scheduleAtFixedRate
方法 运行 TimerTask
,但费率似乎根本没有固定 - 经过几个小时的 运行ning 滴答声停止,然后(几个小时后!)计时器唤醒并立即触发一系列几十个滴答声......根据 the reference 这是正常行为:
If an execution is delayed for any reason (such as garbage collection or other background activity), two or more executions will occur in rapid succession to "catch up."
所以我不得不寻找另一种解决方案。
接下来我尝试了 ScheduledExecutorService
并且它是 scheduleAtFixedRate
方法,遵循 scheduleAtFixedRate executes fast 的回答。它也没有完全解决问题 - 我观察到相同的冻结,尽管它们更短(最多一个小时)。
我现在的代码很简单:
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
Log.d(LOG_TAG, "Schedule run");
mHandler.post(new Runnable() {
@Override
public void run() {
Log.d(LOG_TAG, "Call timer");
serviceHelper.doAction();
Log.d(LOG_TAG, "Task complete");
}
});
}
}, 0, AppConstant.NOTIFY_INTERVAL, TimeUnit.MILLISECONDS);
所以,我需要一个如何增加日程安排稳定性的建议(+-3 分钟的间隔是可以接受的,但 10 到 30 分钟太长了)。
I have a service in my Android app that has to do some actions once every 5 minutes. In order to achieve this I've tried to run TimerTask [...]
Next I've tried ScheduledExecutorService
我认为您使用了错误的工具来完成我认为 AlarmManager far better choice. See docs' Scheduling Repeating Alarms 的任务,并确保您了解 API 19 中引入的准确和不准确警报之间的区别(因为您肯定不想要后者)。
我的 Android 应用程序中有一项服务必须每 5 分钟执行一次操作。
为了实现这一点,我尝试通过 Timer.scheduleAtFixedRate
方法 运行 TimerTask
,但费率似乎根本没有固定 - 经过几个小时的 运行ning 滴答声停止,然后(几个小时后!)计时器唤醒并立即触发一系列几十个滴答声......根据 the reference 这是正常行为:
If an execution is delayed for any reason (such as garbage collection or other background activity), two or more executions will occur in rapid succession to "catch up."
所以我不得不寻找另一种解决方案。
接下来我尝试了 ScheduledExecutorService
并且它是 scheduleAtFixedRate
方法,遵循 scheduleAtFixedRate executes fast 的回答。它也没有完全解决问题 - 我观察到相同的冻结,尽管它们更短(最多一个小时)。
我现在的代码很简单:
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
Log.d(LOG_TAG, "Schedule run");
mHandler.post(new Runnable() {
@Override
public void run() {
Log.d(LOG_TAG, "Call timer");
serviceHelper.doAction();
Log.d(LOG_TAG, "Task complete");
}
});
}
}, 0, AppConstant.NOTIFY_INTERVAL, TimeUnit.MILLISECONDS);
所以,我需要一个如何增加日程安排稳定性的建议(+-3 分钟的间隔是可以接受的,但 10 到 30 分钟太长了)。
I have a service in my Android app that has to do some actions once every 5 minutes. In order to achieve this I've tried to run TimerTask [...] Next I've tried ScheduledExecutorService
我认为您使用了错误的工具来完成我认为 AlarmManager far better choice. See docs' Scheduling Repeating Alarms 的任务,并确保您了解 API 19 中引入的准确和不准确警报之间的区别(因为您肯定不想要后者)。