Android实现计时与倒计时的常用方法小结

 更新时间:2015年10月29日 14:21:12   作者:阳光岛主  
这篇文章主要介绍了Android实现计时与倒计时的常用方法,总结并对比分析了几种常用计时方法的特点,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例总结了Android实现计时与倒计时的常用方法。分享给大家供大家参考,具体如下:

方法一

Timer与TimerTask(Java实现)

public class timerTask extends Activity{ 
  private int recLen = 11; 
  private TextView txtView; 
  Timer timer = new Timer(); 
  public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.timertask); 
    txtView = (TextView)findViewById(R.id.txttime); 
    timer.schedule(task, 1000, 1000);    // timeTask 
  }   
  TimerTask task = new TimerTask() { 
    @Override 
    public void run() { 
      runOnUiThread(new Runnable() {   // UI thread 
        @Override 
        public void run() { 
          recLen--; 
          txtView.setText(""+recLen); 
          if(recLen < 0){ 
            timer.cancel(); 
            txtView.setVisibility(View.GONE); 
          } 
        } 
      }); 
    } 
  }; 
}

方法二

TimerTask与Handler(不用Timer的改进型)

public class timerTask extends Activity{ 
  private int recLen = 11; 
  private TextView txtView; 
  Timer timer = new Timer(); 
  public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.timertask); 
    txtView = (TextView)findViewById(R.id.txttime); 
    timer.schedule(task, 1000, 1000);    // timeTask 
  }   
  final Handler handler = new Handler(){ 
    @Override 
    public void handleMessage(Message msg){ 
      switch (msg.what) { 
      case 1: 
        txtView.setText(""+recLen); 
        if(recLen < 0){ 
          timer.cancel(); 
          txtView.setVisibility(View.GONE); 
        } 
      } 
    } 
  }; 
  TimerTask task = new TimerTask() { 
    @Override 
    public void run() { 
      recLen--; 
      Message message = new Message(); 
      message.what = 1; 
      handler.sendMessage(message); 
    } 
  }; 
}

方法三

Handler与Message(不用TimerTask)

public class timerTask extends Activity{ 
  private int recLen = 11; 
  private TextView txtView; 
  public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.timertask);  
    txtView = (TextView)findViewById(R.id.txttime); 
    Message message = handler.obtainMessage(1);   // Message 
    handler.sendMessageDelayed(message, 1000); 
  }  
  final Handler handler = new Handler(){ 
    public void handleMessage(Message msg){     // handle message 
      switch (msg.what) { 
      case 1: 
        recLen--; 
        txtView.setText("" + recLen); 
        if(recLen > 0){ 
          Message message = handler.obtainMessage(1); 
          handler.sendMessageDelayed(message, 1000);   // send message 
        }else{ 
          txtView.setVisibility(View.GONE); 
        } 
      } 
      super.handleMessage(msg); 
    } 
  }; 
}

方法四

Handler与Thread(不占用UI线程)

public class timerTask extends Activity{ 
  private int recLen = 0; 
  private TextView txtView; 
  public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.timertask); 
    txtView = (TextView)findViewById(R.id.txttime); 
    new Thread(new MyThread()).start();     // start thread 
  }   
  final Handler handler = new Handler(){     // handle 
    public void handleMessage(Message msg){ 
      switch (msg.what) { 
      case 1: 
        recLen++; 
        txtView.setText("" + recLen); 
      } 
      super.handleMessage(msg); 
    } 
  }; 
  public class MyThread implements Runnable{   // thread 
    @Override 
    public void run(){ 
      while(true){ 
        try{ 
          Thread.sleep(1000);   // sleep 1000ms 
          Message message = new Message(); 
          message.what = 1; 
          handler.sendMessage(message); 
        }catch (Exception e) { 
        } 
      } 
    } 
  } 
}

方法五

Handler与Runnable(最简单型)

public class timerTask extends Activity{ 
  private int recLen = 0; 
  private TextView txtView; 
  public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.timertask); 
    txtView = (TextView)findViewById(R.id.txttime); 
    handler.postDelayed(runnable, 1000); 
  }   
  Handler handler = new Handler(); 
  Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
      recLen++; 
      txtView.setText("" + recLen); 
      handler.postDelayed(this, 1000); 
    } 
  }; 
}

计时与倒计时

方法1,方法2和方法3,都是倒计时
方法4,方法5,都是计时
计时和倒计时,都可使用上述方法实现(代码稍加改动)

UI线程比较

方法1,方法2和方法3,都是在UI线程实现的计时;
方法4和方法5,是另开Runnable线程实现计时

实现方式比较

方法1,采用的是Java实现,即Timer和TimerTask方式;
其它四种方法,都采用了Handler消息处理

推荐使用

如果对UI线程交互要求不很高,可以选择方法2和方法3
如果考虑到UI线程阻塞,严重影响到用户体验,推荐使用方法4,另起线程单独用于计时和其它的逻辑处理
方法5,综合了前几种方法的优点,是最简的

希望本文所述对大家Android程序设计有所帮助。

相关文章

  • Android中Activity滑动关闭的效果

    Android中Activity滑动关闭的效果

    这篇文章主要介绍了Android中Activity滑动关闭的效果,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-05-05
  • Android使用Rotate3dAnimation实现3D旋转动画效果的实例代码

    Android使用Rotate3dAnimation实现3D旋转动画效果的实例代码

    利用Android的ApiDemos的Rotate3dAnimation实现了个图片3D旋转的动画,围绕Y轴进行旋转,还可以实现Z轴的缩放。点击开始按钮开始旋转,点击结束按钮停止旋转。
    2018-05-05
  • Android仿支付宝密码输入效果封装

    Android仿支付宝密码输入效果封装

    这篇文章主要为大家详细介绍了Android仿支付宝密码输入效果的封装,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Flutter 如何封装文本输入框组件

    Flutter 如何封装文本输入框组件

    在实际开发过程中,往往开始是完成功能层面的开发,然而再考虑组件封装和代码优化。当然,组件封装越早做越好,因为这样会提高整个团队开发的规范性和效率。本文将介绍如何封装一个文本输入框组件
    2021-06-06
  • Android中SeekBar拖动条使用方法详解

    Android中SeekBar拖动条使用方法详解

    这篇文章主要为大家详细介绍了Android中SeekBar拖动条使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • 详解flutter中常用的container layout实例

    详解flutter中常用的container layout实例

    这篇文章主要为大家介绍了详解flutter中常用的container layout实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Android图片压缩几种方式总结

    Android图片压缩几种方式总结

    这篇文章主要介绍了Android图片压缩几种方式总结的相关资料,需要的朋友可以参考下
    2017-06-06
  • Android媒体通知栏多系统适配实例讲解

    Android媒体通知栏多系统适配实例讲解

    对于Android来说其中一项很方便的操作便是下拉菜单,下拉菜单栏可以快捷打开某项设置,这篇文章主要给大家介绍了关于Android通知栏增加快捷开关的功能实现,需要的朋友可以参考下
    2023-04-04
  • Android学习笔记(二)之电话拨号器

    Android学习笔记(二)之电话拨号器

    目前手机市场上android已经具有强大的霸主地位,吸引了很多的追棒者,android学习越来越火热,本文给大家介绍android学习笔记(二)之电话拨号器,感兴趣的朋友一起学习吧
    2015-11-11
  • Android开发中MJRefresh自定义刷新动画效果

    Android开发中MJRefresh自定义刷新动画效果

    本文给大家介绍了MJRefresh自定义刷新动画效果,包括常见用法等相关知识,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-11-11

最新评论