广告
返回顶部
首页 > 资讯 > 移动开发 >Android实现计时与倒计时的常用方法小结
  • 715
分享到

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

倒计时小结方法Android 2022-06-06 09:06:33 715人浏览 安东尼
摘要

本文实例总结了Android实现计时与倒计时的常用方法。分享给大家供大家参考,具体如下: 方法一 Timer与TimerTask(Java实现) public class t

本文实例总结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自定义圆形倒计时显示控件Android自定义圆环倒计时控件Android倒计时控件 Splash界面5秒自动跳转Android倒计时的开始与停止 剩余时分秒的展示Android仿Keep运动休息倒计时圆形控件android自定义倒计时控件示例android实现倒计时功能代码Android实现加载广告图片和倒计时的开屏布局Android 实现闪屏页和右上角的倒计时跳转实例代码android实现倒计时功能(开始、暂停、0秒结束)


--结束END--

本文标题: Android实现计时与倒计时的常用方法小结

本文链接: https://www.lsjlt.com/news/26408.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作