当我使用 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 秒后执行。
最佳答案
改用这个类并检查它是否已经在运行:
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;
}
关于java - 处理程序 - postDelayed 执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8300048/