-3

我想每 100 毫秒执行一次操作,持续 1000 毫秒。

我相信我需要使用

handler

我怎么做?

4

4 回答 4

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 毫秒运行一次,所有方法都是这种情况。

于 2012-08-07T13:52:46.203 回答
1
Timer t = new Timer();
int count = 0;
t.scheduleAtFixedRate(new TimerTask() {
    count++;
    // Do stuff
    if (count >= 10)
        t.cancel();
}, 0, 100);

这会安排一个计时器来执行 a TimerTask,延迟为 0 毫秒。它将TimerTask每 100 毫秒执行一次主体。用于count跟踪您在任务中的位置,在 10 次迭代后,您可以取消计时器。

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

于 2012-08-07T13:53:00.930 回答
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            
            }
        }       
    }
于 2012-08-07T14:10:11.523 回答
0

您可以使用Timer.

于 2012-08-07T13:52:31.880 回答