Android倒计时简单方法实现

来源:互联网 发布:淘宝海鲜店铺排名 编辑:程序博客网 时间:2024/06/06 00:47
以前我们实现一个倒计时功能是如何实现的呢?一般都是创建一个线程来通过消息处理实现更新界面,即Handler handler=new Handler(){


@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
//do something to refresh view
}

}

};

配合new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
try {
while(true){
Thread.sleep(1000);
handler.sendEmptyMessage(0);
}

} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();

但现在并不是用它实现,有更简单的方法,人嘛就是要学会偷懒,现在新认识一个类CountDownTimer。它只要调用

           new CountDownTimer(30000,1000) {

@Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
tx.setText(millisUntilFinished/1000+"秒");

}

@Override
public void onFinish() {
// TODO Auto-generated method stub
tx.setText("done!!!");
}
}.start();即可实现倒计时。

主要是重写onTick和onFinsh这两个方法,onFinish()中的代码是计时器结束的时候要做的事情;onTick(Long m)中的代码是你倒计时开始时要做的事情,参数m是直到完成的时间,构造方法两个参数中,前者是倒计的时间数,后者是倒计每秒中间 的间隔时间,都是以毫秒为单位。例如要倒计时30秒,每秒中间间隔时间是1秒,两个参数可以这样写 CountDownTimer(30000,1000) 。 值得注意的一点是onTick方法是上锁的(synchronized),也就是说要是上一次调用未完成,则不会启动。这个实现相应的执行倒计时间隔相比显著。

      将后台线程的创建和Handler队列封装成为了一个方便的类调用。省去自己创建线程以及handler处理,这便是此类的核心。