我想每 100 毫秒执行一次操作,持续 1000 毫秒。
我相信我需要使用
handler
我怎么做?
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 毫秒运行一次,所有方法都是这种情况。
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 毫秒的任务)将导致滞后/潜在的不良结果。
我现在没有时间测试这个,但这应该可以
这是一种方式:
创建这个计时器:
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
}
}
}
您可以使用Timer
.