0

タスク時間の実行とは独立して、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 最初の 2 回が間違っているのはなぜですか?

私が Android にタグを付けた理由は、私が Android システムでそれを行っているためであり、何らかの影響がある可能性があります。

4

1 に答える 1

2

そのように run メソッド内でスリープするのではなく、scheduleAtFixedRate を使用する必要があります。これにより、タスクの実行にかかる時間に関係なく、一定の間隔 (約 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                        
            }
    }
}
于 2013-01-30T15:13:20.460 に答える