每100毫秒进行一次操作1000毫秒

时间:2012-08-07 13:49:22

标签: android

我想每隔100毫秒进行1000毫秒的操作。

我相信我需要使用

handler

我该怎么做?

4 个答案:

答案 0 :(得分:3)

Handler h = new Handler();
int count = 0;
int delay = 100;//milli seconds
long now = 0;

h.postDelayed(new Runnable(){

    public void run(){
        now = System.currentTimeMillis();
        //do something

        if(10>count++)
        h.postAtTime(this, now + delay);
    },
delay};

请注意,您的操作必须少于100毫秒才能执行,否则无法每100毫秒运行一次,所有方法都是这样。

答案 1 :(得分:1)

Timer t = new Timer();
int count = 0;
t.scheduleAtFixedRate(new TimerTask() {
    count++;
    // Do stuff
    if (count >= 10)
        t.cancel();
}, 0, 100);

这会调度计时器以执行TimerTask,延迟为0毫秒。它将每100毫秒执行TimerTask的主体。使用count跟踪您在任务中的位置,经过10次迭代后,您可以取消计时器。

正如@ Jug6ernaut所提到的,确保您的任务不会花费很长时间来执行。冗长的任务(在您的情况下花费超过100毫秒的任务)将导致滞后/可能不期望的结果。

答案 2 :(得分:0)

您可以使用Timer

来完成此操作

答案 3 :(得分:0)

我现在没有时间对此进行测试,但这应该可行

这是一种方式:

  • 您想从此处调用的方法可能需要是静态的
  • 此类可以嵌套在另一个类
  • 您可以使用%(模数),这样计时器可以继续计数,您可以设置更多间隔的事情

创建此计时器:

private Timer mTimer = new Timer();

启动此计时器:

mTimer.scheduleAtFixedRate(new MyTask(), 0, 100L);

计时器类:

    /**
     * Nested timer to call the task
     */
    private class MyTask extends TimerTask {
        @Override
        public void run() {
            try {
                counter++;
                //call your method that you want to do every 100ms
                            if (counter == 10) {
                               counter = 0;
                               //call method you wanted every 1000ms
                            }
                Thread.sleep(100);
            } catch (Throwable t) { 
                //handle this  - maybe by starting it back up again            
            }
        }       
    }