实现Android计时与倒计时方法

转载 2012年03月31日 14:18:09

 

今天给大家介绍几个Android中实现计时和倒计时的几种方法,这几种方法也许今后会帮上大家,现贴出来如下:

方法一

Timer与TimerTask(Java实现)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class timerTask extendsActivity{
  
    privateintrecLen = 11;
    privateTextView txtView;
    Timer timer =newTimer();
  
    publicvoidonCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
          
        setContentView(R.layout.timertask);
        txtView = (TextView)findViewById(R.id.txttime);
          
        timer.schedule(task,1000,1000);      // timeTask
    }   
  
    TimerTask task =newTimerTask() {
        @Override
        publicvoidrun() {
  
            runOnUiThread(newRunnable() {     // UI thread
                @Override
                publicvoidrun() {
                    recLen--;
                    txtView.setText(""+recLen);
                    if(recLen <0){
                        timer.cancel();
                        txtView.setVisibility(View.GONE);
                    }
                }
            });
        }
    };
}

方法二

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class timerTask extendsActivity{
    privateintrecLen = 11;
    privateTextView txtView;
    Timer timer =newTimer();
  
    publicvoidonCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
  
        setContentView(R.layout.timertask);
        txtView = (TextView)findViewById(R.id.txttime);
  
        timer.schedule(task,1000,1000);      // timeTask
    }   
  
    finalHandler handler =newHandler(){
        @Override
        publicvoidhandleMessage(Message msg){
            switch(msg.what) {
            case1:
                txtView.setText(""+recLen);
                if(recLen <0){
                    timer.cancel();
                    txtView.setVisibility(View.GONE);
                }
            }
        }
    };
  
    TimerTask task =newTimerTask() {
        @Override
        publicvoidrun() {
            recLen--;
            Message message =newMessage();
            message.what =1;
            handler.sendMessage(message);
        }
    };
}

方法三

Handler与Message(不用TimerTask)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class timerTask extendsActivity{
    privateintrecLen = 11;
    privateTextView txtView;
  
    publicvoidonCreate(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);
    }  
  
    finalHandler handler =newHandler(){
  
        publicvoidhandleMessage(Message msg){        // handle message
            switch(msg.what) {
            case1:
                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线程)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class timerTask extendsActivity{
    privateintrecLen = 0;
    privateTextView txtView;
  
    publicvoidonCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
  
        setContentView(R.layout.timertask);
        txtView = (TextView)findViewById(R.id.txttime);
          
        newThread(newMyThread()).start();         // start thread
    }   
  
    finalHandler handler =newHandler(){         // handle
        publicvoidhandleMessage(Message msg){
            switch(msg.what) {
            case1:
                recLen++;
                txtView.setText(""+ recLen);
            }
            super.handleMessage(msg);
        }
    };
  
    publicclassMyThread implementsRunnable{     // thread
        @Override
        publicvoidrun(){
            while(true){
                try{
                    Thread.sleep(1000);    // sleep 1000ms
                    Message message =newMessage();
                    message.what =1;
                    handler.sendMessage(message);
                }catch(Exception e) {
                }
            }
        }
    }
}

方法五

Handler与Runnable(最简单型)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class timerTask extendsActivity{
    privateintrecLen = 0;
    privateTextView txtView;
  
    publicvoidonCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
  
        setContentView(R.layout.timertask);
        txtView = (TextView)findViewById(R.id.txttime);
          
        handler.postDelayed(runnable,1000);
    }   
  
    Handler handler =newHandler();
    Runnable runnable =newRunnable() {
        @Override
        publicvoidrun() {
            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消息处理

 

 

 

 

http://www.itivy.com/android/archive/2011/10/25/some-method-android-timer.html

 

 

 

Android实现计时以及倒计时的几种方法

方法1: Timer与TimerTask(Java实现)public class timerTask extends Activity{ private int recLen = 11...
  • CL18652469346
  • CL18652469346
  • 2016年11月18日 14:15
  • 736

android开发 倒计时和计时的实现

转自:http://blog.csdn.net/t12x3456/article/details/7816500在购物网站的促销活动中一般都有倒计时限制购物时间或者折扣的时间,这些都是如何实现的呢?在...
  • pkandroid
  • pkandroid
  • 2016年08月28日 12:52
  • 1670

Android实现多个倒计时优化与源码分析

因为之前有个项目需求是需要时时刻去更新UI倒计时,之前想到的,这简单嘛,用计时或者Handler就可以搞定,而且性能也不错,但是需求要ListView,什么,?大量的View都需要,那Handle处理...
  • u010316858
  • u010316858
  • 2015年08月12日 10:59
  • 2439

Android四大组件应用系列——使用BroadcastReceiver和Service实现倒计时

一、问题描述   Service组件可以实现在后台执行一些耗时任务,甚至可以在程序退出的情况下,让Service在后台继续保持运行状态。Service分本地服务和远程服务,Local地服...
  • JerehEdu
  • JerehEdu
  • 2016年02月25日 15:27
  • 737

android handle实现倒计时

Android开发-02-ListView中给某些条目进行倒计时 2014-10-30 11:10 本文重点在ListView中使用倒计时 在Android的开发中,我们经常...
  • h183288132
  • h183288132
  • 2015年06月28日 19:56
  • 767

Android利用Timer实现倒计时效果小demo

今天闲来无聊,就写个倒计时吧! 1. 布局,两个button
  • qq_34475058
  • qq_34475058
  • 2016年12月23日 18:00
  • 726

Android倒计时原理的实现

Android倒计时原理的实现 需求:对于密码框,用户多次错误输入后,需要禁止用户输入,并且提示倒计时,类似于android手机多次错误输入锁屏密码;方案1:使用handler倒计时,提...
  • wu00103356
  • wu00103356
  • 2016年01月29日 10:24
  • 905

自定义ChronometerView实现类似秒表倒计时,短信验证码倒计时功能

一、自定义ChronometerView extends TextView 主要原理:先设置一个基准倒计时时间mBaseSeconds,内置handler 每隔1s发送一个空消息,mRemainSec...
  • oFanJunBin
  • oFanJunBin
  • 2015年12月06日 21:48
  • 1664

Android实现计时与倒计时(限时抢购)的几种方法(线程)

方法一 Timer与TimerTask(Java实现) [java] view plaincopy public class timerTask extends Activity{     ...
  • a351945755
  • a351945755
  • 2016年03月16日 16:42
  • 1817

handler的使用---如何实现Android计时与倒计时的几种方法

方法一 Timer与TimerTask(Java实现)   public class timerTask extends Activity{ ...
  • chaozhung
  • chaozhung
  • 2013年05月16日 08:53
  • 2200
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现Android计时与倒计时方法
举报原因:
原因补充:

(最多只允许输入30个字)