-1
我需要大约5秒的延迟。我已用定时器使用以下代码的尝试:带有延迟的TimerTask/Handler多次调用
Timer myTimer = new Timer();
myTimer.schedule(new TimerTask() {
@Override
public void run() {
Log.d(TAG,"Timer");
}
}, 4000, 5000);
当我检查日志,则定时器被越来越印刷三次。如果我改变时间,有时也会在日志中打印4次。
我一直在使用处理器尝试以及象下面这样:
final Handler mHandler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(10000);
mHandler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Log.d(Utility.TAG,"Sleep::");
}
});
} catch (Exception e) {
// TODO: handle exception
}
}
}
}).start();
但同样的日志印刷多次。我只是想不多次调用我的方法。我怎样才能实现它?
编辑
没有线程使用处理器以及象下面这样:
final Handler h = new Handler();
final int delay = 3000; //milliseconds
h.postDelayed(new Runnable(){
public void run(){
//do something
h.postDelayed(this, delay);
Log.d(Utility.TAG,"Sleep ::");
}
}, delay);
但同样,日志是越来越印刷三次
只使用一个'Handler'没有任何线程 – pskink
哪里是'最后的处理程序H =新的处理程序();'在你的代码?添加'Log.d(Utility.TAG,“Start ::”);'看它什么时候叫 – pskink
@pskink我编辑过这个问题。你可以看到,我已经定义了最后的Handler h。它正在图像的点击监听器中被调用。 – BLEdevices