这里列举了一个简单实现倒计时的例子Timer+Handler。
首先创建一个Timer对象,并设立一个倒计时开始时间recLen
Timer timer = new Timer();
private int recLen = 120;
一个Timer是可以开启很多任务的,每个任务都用一个TimerTask表示。因此需要创建一个自定义的TimerTask用来实现自己的需求,更重要的是不用销毁Timer从而可以创建多个TimerTask。
class MyTimerTask extends TimerTask{
@Override
public void run() {
recLen--;
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
}
倒计时开始,我们用Hanlder进行UI更新
final Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
switch (msg.what) {
case 1:
codeBtn.setText(recLen+"s");
if(recLen < 0){
if (myTimerTask!=null) {
myTimerTask.cancel();
myTimerTask = null;
}
isWaitCode = false;
}else{
isWaitCode = true;
}
showUI();
}
}
};
在代码相应位置调用计时器开启
myTimerTask = new MyTimerTask();
timer.schedule(myTimerTask, 1000, 1000);
java.lang.IllegalStateException: TimerTask is scheduled already
是因为Timer已经被cancel,不能再调用schedule方法了,我们可以用TimerTask的cancel方法,这样只是关闭了一个task而不会关闭掉整个Timer。