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

转载 2013年12月03日 10:40:58

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



在购物网站的促销活动中一般都有倒计时限制购物时间或者折扣的时间,这些都是如何实现的呢?

在一个安卓客户端项目中恰好遇到了类似的问题,一开始使用的是Timer与 TimerTask, 虽然此方法通用,但后来考虑在安卓中是否有更佳的方案,于是乎共找到以下五种实现方案,另外还有一种使用CountDownTimer进行计时的方面,我会在单独的文章中进行介绍

效果如图:



方法一

Timer与TimerTask(Java实现)

[java] view plaincopy
  1. public class timerTask extends Activity{    
  2.    
  3.     private int recLen = 11;    
  4.     private TextView txtView;    
  5.     Timer timer = new Timer();    
  6.    
  7.     public void onCreate(Bundle savedInstanceState){    
  8.         super.onCreate(savedInstanceState);    
  9.             
  10.         setContentView(R.layout.timertask);    
  11.         txtView = (TextView)findViewById(R.id.txttime);    
  12.             
  13.         timer.schedule(task, 10001000);       // timeTask    
  14.     }       
  15.    
  16.     TimerTask task = new TimerTask() {    
  17.         @Override    
  18.         public void run() {    
  19.    
  20.             runOnUiThread(new Runnable() {      // UI thread    
  21.                 @Override    
  22.                 public void run() {    
  23.                     recLen--;    
  24.                     txtView.setText(""+recLen);    
  25.                     if(recLen < 0){    
  26.                         timer.cancel();    
  27.                         txtView.setVisibility(View.GONE);    
  28.                     }    
  29.                 }    
  30.             });    
  31.         }    
  32.     };    
  33. }    




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

[java] view plaincopy
  1. public class timerTask extends Activity{    
  2.     private int recLen = 11;    
  3.     private TextView txtView;    
  4.     Timer timer = new Timer();    
  5.    
  6.     public void onCreate(Bundle savedInstanceState){    
  7.         super.onCreate(savedInstanceState);    
  8.    
  9.         setContentView(R.layout.timertask);    
  10.         txtView = (TextView)findViewById(R.id.txttime);    
  11.    
  12.         timer.schedule(task, 10001000);       // timeTask    
  13.     }       
  14.    
  15.     final Handler handler = new Handler(){    
  16.         @Override    
  17.         public void handleMessage(Message msg){    
  18.             switch (msg.what) {    
  19.             case 1:    
  20.                 txtView.setText(""+recLen);    
  21.                 if(recLen < 0){    
  22.                     timer.cancel();    
  23.                     txtView.setVisibility(View.GONE);    
  24.                 }    
  25.             }    
  26.         }    
  27.     };    
  28.    
  29.     TimerTask task = new TimerTask() {    
  30.         @Override    
  31.         public void run() {    
  32.             recLen--;    
  33.             Message message = new Message();    
  34.             message.what = 1;    
  35.             handler.sendMessage(message);    
  36.         }    
  37.     };    
  38. }    



方法三

[java] view plaincopy
  1. Handler与Message(不用TimerTask)  
  2.   
  3. public class timerTask extends Activity{    
  4.     private int recLen = 11;    
  5.     private TextView txtView;    
  6.    
  7.     public void onCreate(Bundle savedInstanceState) {      
  8.         super.onCreate(savedInstanceState);      
  9.    
  10.         setContentView(R.layout.timertask);     
  11.         txtView = (TextView)findViewById(R.id.txttime);    
  12.    
  13.         Message message = handler.obtainMessage(1);     // Message    
  14.         handler.sendMessageDelayed(message, 1000);    
  15.     }      
  16.    
  17.     final Handler handler = new Handler(){    
  18.    
  19.         public void handleMessage(Message msg){         // handle message    
  20.             switch (msg.what) {    
  21.             case 1:    
  22.                 recLen--;    
  23.                 txtView.setText("" + recLen);    
  24.    
  25.                 if(recLen > 0){    
  26.                     Message message = handler.obtainMessage(1);    
  27.                     handler.sendMessageDelayed(message, 1000);      // send message    
  28.                 }else{    
  29.                     txtView.setVisibility(View.GONE);    
  30.                 }    
  31.             }    
  32.    
  33.             super.handleMessage(msg);    
  34.         }    
  35.     };    
  36. }    


方法四

Handler与Thread(不占用UI线程)

[java] view plaincopy
  1. public class timerTask extends Activity{    
  2.     private int recLen = 0;    
  3.     private TextView txtView;    
  4.    
  5.     public void onCreate(Bundle savedInstanceState){    
  6.         super.onCreate(savedInstanceState);    
  7.    
  8.         setContentView(R.layout.timertask);    
  9.         txtView = (TextView)findViewById(R.id.txttime);    
  10.             
  11.         new Thread(new MyThread()).start();         // start thread    
  12.     }       
  13.    
  14.     final Handler handler = new Handler(){          // handle    
  15.         public void handleMessage(Message msg){    
  16.             switch (msg.what) {    
  17.             case 1:    
  18.                 recLen++;    
  19.                 txtView.setText("" + recLen);    
  20.             }    
  21.             super.handleMessage(msg);    
  22.         }    
  23.     };    
  24.    
  25.     public class MyThread implements Runnable{      // thread    
  26.         @Override    
  27.         public void run(){    
  28.             while(true){    
  29.                 try{    
  30.                     Thread.sleep(1000);     // sleep 1000ms    
  31.                     Message message = new Message();    
  32.                     message.what = 1;    
  33.                     handler.sendMessage(message);    
  34.                 }catch (Exception e) {    
  35.                 }    
  36.      



方法五

[java] view plaincopy
  1. Handler与Runnable(最简单型)    
  2.   
  3. public class timerTask extends Activity{    
  4.     private int recLen = 0;    
  5.     private TextView txtView;    
  6.    
  7.     public void onCreate(Bundle savedInstanceState){    
  8.         super.onCreate(savedInstanceState);    
  9.    
  10.         setContentView(R.layout.timertask);    
  11.         txtView = (TextView)findViewById(R.id.txttime);    
  12.         runnable.run();   
  13.     }       
  14.    
  15.     Handler handler = new Handler();    
  16.     Runnable runnable = new Runnable() {    
  17.         @Override    
  18.         public void run() {    
  19.             recLen++;    
  20.             txtView.setText("" + recLen);    
  21.             handler.postDelayed(this1000);    
  22.         }    
  23.     };    
  24. }    



计时与倒计时
方法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实现计时与倒计时(限时抢购)的几种方法

在购物网站的促销活动中一般都有倒计时限制购物时间或者折扣的时间,这些都是如何实现的呢? 在一个安卓客户端项目中恰好遇到了类似的问题,一开始使用的是Timer与 TimerTask, 虽然此方法通...

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

在购物网站的促销活动中一般都有倒计时限制购物时间或者折扣的时间,这些都是如何实现的呢? 在一个安卓客户端项目中恰好遇到了类似的问题,一开始使用的是Timer与 TimerTask, 虽然此方法通用,...

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

Android实现计时与倒计时(限时抢购)的几种方法 在购物网站的促销活动中一般都有倒计时限制购物时间或者折扣的时间,这些都是如何实现的呢? 在一个安卓...

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

Android实现计时与倒计时(限时抢购)的几种方法 分类: 【Android开发学习之路】2013-12-03 10:40 884人阅读 评论(0) 收藏 举报 Android ...

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

在购物网站的促销活动中一般都有倒计时限制购物时间或者折扣的时间,这些都是如何实现的呢? 在最近的一个安卓客户端项目中恰好遇到了类似的问题,一开始使用的是Timer与 TimerTask, 虽然此方法...

js显示当前时间(动态)以及限时抢购倒计时

本篇博文知识点: js的Date类的使用 setTimeout的使用(注意和setInterval的区别) 将“秒”格式化成常用的格式 动态地显示当前时间 当前时间 <scri...

做限时抢购的倒计时

思路:让后台传一个抢购截止的时间,然后你写一个方法与当前时间做比较,将相差的时间显示出来 //定时器 @property(nonatomic,strong)NSTimer *timedSpecial...

ecshop 中添加限时抢购功能(倒计时)

第一步:在后台admin/templates/goods_info.htm中找到大概165行修改
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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