当我使用Handler及其postDelayed方法时,run()方法执行两次。以下是我的代码的一部分。
Handler deneme = new Handler();
deneme.postDelayed(new Runnable() {
@Override
public void run()
{
randomOyna();
}
}, 1000);
其中randomOyna是方法
public void randomOyna()
{
Log.v("sonOlarak", "çalıştı");
}
我监控LogCat并看到“çalıştı”条目被写入两次,因此randomOyna被调用两次。任务按计划进行,但在1秒和2秒后执行。
答案 0 :(得分:0)
请使用此类,并检查它是否已先运行:
public class Timer {
private java.util.Timer timer;
public synchronized void schedule(final TimerTask timerTask, long delay) {
stop();
timer=new java.util.Timer();
timer.schedule(new TimerTask(){
@Override
public void run() {
timerTask.run();
timer = null;
}},delay);
}
public synchronized void stop() {
if(timer!=null) {
timer.cancel();
timer.purge();
timer = null;
}
}
public synchronized void scheduleAtFixedRate(TimerTask timerTask, long delay, long period) {
stop();
timer=new java.util.Timer();
timer.scheduleAtFixedRate(timerTask, delay, period);
}
public boolean isRunning() {
return timer!=null;
}
}