Android实现计时与倒计时的几种方法

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

方法一

Timer与TimerTask(Java实现)

public class timerTask extends Activityprivate int recLen = 11private 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 Activityprivate int recLen = 11private 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 Activityprivate int recLen = 11private 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 Activityprivate int recLen = 0private 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 Activityprivate int recLen = 0private 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之多线程工作-AsyncTask与handler


           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值