我需要延迟大约5秒钟。我尝试使用以下代码使用Timer:
Timer myTimer = new Timer();
myTimer.schedule(new TimerTask() {
@Override
public void run() {
Log.d(TAG,"Timer");
}
}, 4000, 5000);
当我检查日志时,计时器打印三次。如果我改变时间,有时也会以日志4次打印。
我尝试过使用Handler,如下所示:
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);
但同样,Log正在打印三次
答案 0 :(得分:0)
您的第三种方法(无Timer
,无Thread
)最接近正确。它多次打印,因为Runnable
每次运行都会重新发布。如果您只想运行一次,请从run()
方法中删除此行:
h.postDelayed(this, delay);