Android处理程序每​​X秒服务一次

时间:2015-02-26 09:52:28

标签: android service handler

我遇到了一个必须在服务中每隔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);
        }
    };

1 个答案:

答案 0 :(得分:1)

可能是您的异步​​任务导致延迟。

只是一个注释,您的计划实施看起来有点奇怪。也许你应该尝试这样的事情,可以证明更有效。

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,以便它可以从下一篇文章开始。