尝试每x次执行一次TimerTask

时间:2013-01-30 15:07:19

标签: java android

我正在尝试每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系统上执行它可能会有一些效果。

2 个答案:

答案 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