Android四种方式实现计时器

本文介绍了四种不同的倒计时实现方法,包括直接使用Thread及Sleep()、利用Handler的sendMessageDelayed()、使用CountDownTimer以及结合Timer与Handler,每种方法都有详细的代码示例。

最近写一个验证码获取的时候倒计时的功能,其实很简单,但是通过研究源码发现,有一种封装过的,所以本人就分别用三种方式实现倒计时的功能,不为别的,只是为了记录。喜欢的朋友收藏即可,说不定就会用到,好了,废话少说,上代码
第一种:第一种一般人都会,就是new 一个Thread,然后通过Sleep()延时的形式实现,这个地方就不做多的解释,非常简单。

new Thread(){
      @Override
       public void run() {
       if (data > 0) {
           data--;
           try {
              sleep(1000);
           } catch (InterruptedException e) {
              e.printStackTrace();
         }
         System.out.println(data +"S");
    }else {
        data = 0;
        System.out.println("重新获取");
      }
  }
}.start();

第二种:第二种使用handler的sendMessageDelayed方法实现:

Message msg=handler.obtainMessage(10);
handler.sendMessageDelayed(msg, 1000);

然后:

Handler handler = new Handler(){
    public void handleMessage(android.os.Message msg) {
    if(data > 0){
       if(msg.what==10){ 
              System.err.println(data + "S");
       }
       Message message=handler.obtainMessage(10);
      handler.sendMessageDelayed(message, 1000);
      data--;
   }else{
      System.err.println("重新获取");
    }
  };
};

第三种:第三种使用封装的CountDownTimer实现,这种方式最简单,代码实现也最少

      new CountDownTimer (60000, 1000) {
             public void onTick(long millisUntilFinished) {
             btn_yanzhengma.setText(millisUntilFinished / 1000 + "S");
             }
                 public void onFinish() {
                 btn_yanzhengma.setText("重新获取!");
             }
      }.start();

第四种:第四种当然就是用到Timer了,

     private TimerTask timerTask;
     private Timer timer;
     private void startTimer() {

        timerTask = new TimerTask() {
        @Override
        public void run() {
              Message msg = new Message();
              msg.what = 0;
              handler.sendMessage(msg);
            }
        };
         timer = new Timer();
         timer.schedule(timerTask, 0, 1000);
        }
       /**
         * button计时的操作
       */
        private int second = 60;
        private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
        if(second >= 1) {
                 System.out.println(second +"S");
                 second--;
         } else {
                 System.out.println("重新获取")
         }
       };
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值