timer任务在第一次运行后停止调用run方法

nwwlzxa7  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(500)

我是新的编程,我正在做一个android应用程序,我有一个要求,我需要监测一些30年代的日志。我正在使用一个计时器任务,但是正在发生的事情是,如果30秒结束并且run方法在终止后执行,计时器任务就不会重复。
这是我的密码:

connectivityTimerTask = new ConnectivityTimerTask();
timer = new Timer(true);
//timer = new Timer(); // tried with this but it is not working
timer.schedule(connectivityTimerTask,30 * 1000);

计时器任务:

public class ConnectivityTimerTask extends TimerTask {

        @Override
        public void run() {
            Log.error("----- ACK NotReceived -----" + System.currentTimeMillis());
            //resetMonitor(); using this method I am setting the timer again
        }
    }

我想知道安排重复时间的最佳做法是什么。我用的是正确的方法吗?我能用这个吗 resetMonitor() 方法?

whlutmcx

whlutmcx1#

要在设置的时间段后重复运行某些代码,请使用 Runnable 用一个 Handler 就像这样

Handler handler = new Handler();

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        // do your logging
        handler.postDelayed(this, 30000);
    }
};

 handler.post(runnable); // or handler.postDelayed(runnable, 30000) if you want it to wait 30s before starting initially

取消

handler.removeCallbacks(runnable);
ubby3x7f

ubby3x7f2#

而不是 schedule() ,您可以使用可以按固定速率调度的计时器任务 scheduleAtFixedRate ,

int THIRTY_SECONDS = 30 * 1000;
Timer mTimer = new Timer();
mTimer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        // do whatever you want every 30s
        Log.e("TAG", "----- ACK NotReceived -----" + System.currentTimeMillis());
    }
}, 0, THIRTY_SECONDS);

当你想停止计时的时候 timer.cancel()

zte4gxcn

zte4gxcn3#

线路

timer.schedule(connectivityTimerTask,30 * 1000)

在30秒延迟后运行任务,一旦任务完成,计时器的工作就完成了。
如果要保持定期运行任务,还必须指定一个时间间隔

schedule (TimerTask task, long delay, long period) // "period" specifies how often you want to run the task

请阅读此处的文档。

相关问题