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,综合了前几种方法的优点,是最简单的

仿淘宝倒计时,转载自大神,仅仅为了为了备份,

今天给大家带来的是仅仅使用一个TextView实现一个高仿京东、淘宝、唯品会等各种电商APP的活动倒计时。最近公司一直加班也没来得及时间去整理,今天难得休息想把这个分享给大家,只求共同学习,以及自己后...

Android仿拼多多拼团堆叠头像

序言做电商的都知道,作为商品的一种售卖方式,拼团是是提供商品售卖的一种及时有效的方式,而在拼团市场中,拼多多无疑是做的最好的一家。于是,研究拼多多的售卖方式之后,我们的产品也开始了这方面的开发。本文将...

用DrawText实现高效的Android倒计时功能。

上一篇博客也说了要实现一个倒计时的自定义控件,这次就把写好的自定义控件给发出来。暂时用着还没有什么问题,功能还较弱,日后可能会继续强化,目前就这样了,觉得还不错的话可以自己修改。 一、成品预览 ...

从零开始搭建 一个完善的 MVP模式开发框架(一),MVP模式的简单介绍篇

摘要: 在MVVM成熟之前MVP模式在Android上有被神化的趋势,笔者曾经在商业项目中从零开始大规模采用过MVP模式对项目进行开发。在使用MVP模式进行开发的时候发现项目的结构模式对开发是有一定的...

Android技巧1:启动屏+新功能左右导航

前言很长一段时间没写博客了,再不写点东西真说不过去,把工作上的一些有价值的东西整理出来分享,在当下还有点时效性,不然迟早会烂在肚子里的。还记得之前小巫有个开源计划是想实现一个星期开发app,现在把它拾...
  • wwj_748
  • wwj_748
  • 2016年01月23日 21:24
  • 3852

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

方法一 Timer与TimerTask(Java实现) [java] public class timerTask extends Activity{           private i...

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

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

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

方法一 Timer与TimerTask(Java实现) [java] view plaincopy public class timerTask extends Activity{     ...

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

Android实现计时与倒计时(限时抢购)的几种方法
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android实现计时与倒计时(限时抢购)的几种方法
举报原因:
原因补充:

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