Android 服务中每 X 秒处理一次

Android Handler every X seconds in Service

我有一个处理程序的问题,它必须在服务内每 X 秒执行一次。基本上计时一点都不精确,有时处理程序每​​ X 秒调用一次,然后 30 秒没有调用,然后在一秒内调用多次。

Handler handler = new Handler();
handler.postDelayed(runnable, 0);


private Runnable runnable = new Runnable() {
@Override
        public void run() {

            new postToCassandra().execute();

            handler.postDelayed(this, CassandraPostBatch.TIME_INTERVAL);
        }
    };

可能是您的异步​​任务造成了延迟。

请注意,您的调度实现看起来有点奇怪。也许你应该试试这样的方法,可能会更有效。

private static final int TIMER_RATE = 30000;
private static final int TIMER_DELAY = 0;
private Timer timer;

private void startTimer() {
    cancelTimer();
    scheduleTimer();
}

private void scheduleTimer() {
    timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            new postToCassandra().execute();
        }
    }, TIMER_DELAY, TIMER_RATE);
}

private void cancelTimer() {
    if (timer != null)
        timer.cancel();
}

然后直接调用 startTimer()。您还可以在 PostToCassandra 任务中实现一个侦听器,它会在任务完成时通知 TimerTask,以便它可以从下一个 post.

开始