我正在尝试每x次执行一次TimerTask,独立于任务时间执行。 我尝试了很多东西,我停在这里:
new Timer().schedule(new Send(),new Date();
...
Class Send extends TimerTask
{
boolean shouldRun = true;
public void run()
{
long start = System.currentTimeMillis();
while(shouldRun)
{
if(condition)
//send to db
long next = start + 300000;
try{
Thread.sleep(next - System.currentTimeMillis());
start = next;
}catch(InterruptedException e){
System.out.println(e);
}
}
}
}
正如你所看到的那样,在我发送给db之前我有一个条件,因此我不会做任何事情所以我的记录时间应该是5分钟的跳跃。
这是输出: 15:08 15:22 15时40 前两次是假的,为什么?
我标记android的原因是因为我在android系统上执行它可能会有一些效果。
答案 0 :(得分:2)
你应该使用scheduleAtFixedRate,而不是像你那样在你的run方法中睡觉。这将确保您的任务以固定的时间间隔(大约每30秒)运行,无论任务执行的时间长短。
new Timer().scheduleAtFixedRate(new Send(),new Date(),30000);
...
Class Send extends TimerTask
{
boolean shouldRun = true;
public void run()
{
long start = System.currentTimeMillis();
while(shouldRun)
{
if(condition)
//send to db
}
}
}
答案 1 :(得分:0)
您可以使用:
public void toCallAsynchronous() {
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
//YOUR CODE HERE
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 2000); // execute in every 2000 second