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

23 阅读3分钟

Timer与TimerTask(Java实现)

[java] view plaincopy

  1. public class timerTask extends Activity{    

  2.     private int recLen = 11;    

  3.     private TextView txtView;    

  4.     Timer timer = new Timer();    

  5.     public void onCreate(Bundle savedInstanceState){    

  6.         super.onCreate(savedInstanceState);    

  7.         setContentView(R.layout.timertask);    

  8.         txtView = (TextView)findViewById(R.id.txttime);    

  9.         timer.schedule(task, 1000, 1000);       // timeTask    

  10.     }       

  11.     TimerTask task = new TimerTask() {    

  12.         @Override    

  13.         public void run() {    

  14.             runOnUiThread(new Runnable() {      // UI thread    

  15.                 @Override    

  16.                 public void run() {    

  17.                     recLen--;    

  18.                     txtView.setText(""+recLen);    

  19.                     if(recLen < 0){    

  20.                         timer.cancel();    

  21.                         txtView.setVisibility(View.GONE);    

  22.                     }    

  23.                 }    

  24.             });    

  25.         }    

  26.     };    

  27. }    

方法二

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.     public void onCreate(Bundle savedInstanceState){    

  6.         super.onCreate(savedInstanceState);    

  7.         setContentView(R.layout.timertask);    

  8.         txtView = (TextView)findViewById(R.id.txttime);    

  9.         timer.schedule(task, 1000, 1000);       // timeTask    

  10.     }       

  11.     final Handler handler = new Handler(){    

  12.         @Override    

  13.         public void handleMessage(Message msg){    

  14.             switch (msg.what) {    

  15.             case 1:    

  16.                 txtView.setText(""+recLen);    

  17.                 if(recLen < 0){    

  18.                     timer.cancel();    

  19.                     txtView.setVisibility(View.GONE);    

  20.                 }    

  21.             }    

  22.         }    

  23.     };    

  24.     TimerTask task = new TimerTask() {    

  25.         @Override    

  26.         public void run() {    

  27.             recLen--;    

  28.             Message message = new Message();    

  29.             message.what = 1;    

  30.             handler.sendMessage(message);    

  31.         }    

  32.     };    

  33. }    

方法三

[java] view plaincopy

  1. Handler与Message(不用TimerTask)  

  2. public class timerTask extends Activity{    

  3.     private int recLen = 11;    

  4.     private TextView txtView;    

  5.     public void onCreate(Bundle savedInstanceState) {      

  6.         super.onCreate(savedInstanceState);      

  7.         setContentView(R.layout.timertask);     

  8.         txtView = (TextView)findViewById(R.id.txttime);    

  9.         Message message = handler.obtainMessage(1);     // Message    

  10.         handler.sendMessageDelayed(message, 1000);    

  11.     }      

  12.     final Handler handler = new Handler(){    

  13.         public void handleMessage(Message msg){         // handle message    

  14.             switch (msg.what) {    

  15.             case 1:    

  16.                 recLen--;    

  17.                 txtView.setText("" + recLen);    

  18.                 if(recLen > 0){    

  19.                     Message message = handler.obtainMessage(1);    

  20.                     handler.sendMessageDelayed(message, 1000);      // send message    

  21.                 }else{    

  22.                     txtView.setVisibility(View.GONE);    

  23.                 }    

  24.             }    

  25.             super.handleMessage(msg);    

  26.         }    

  27.     };    

  28. }    

方法四

Handler与Thread(不占用UI线程)

[java] view plaincopy

  1. public class timerTask extends Activity{    

  2.     private int recLen = 0;    

  3.     private TextView txtView;    

  4.     public void onCreate(Bundle savedInstanceState){    

  5.         super.onCreate(savedInstanceState);    

  6.         setContentView(R.layout.timertask);    

  7.         txtView = (TextView)findViewById(R.id.txttime);    

  8.         new Thread(new MyThread()).start();         // start thread    

  9.     }       

  10.     final Handler handler = new Handler(){          // handle    

  11.         public void handleMessage(Message msg){    

  12.             switch (msg.what) {    

  13.             case 1:    

  14.                 recLen++;    

  15.                 txtView.setText("" + recLen);    

  16.             }    

  17.             super.handleMessage(msg);    

  18.         }    

  19.     };    

  20.     public class MyThread implements Runnable{      // thread    

  21.         @Override    

  22.         public void run(){    

  23.             while(true){    

  24.                 try{    

  25.                     Thread.sleep(1000);     // sleep 1000ms    

  26.                     Message message = new Message();    

  27.                     message.what = 1;    

小福利:

在当下这个碎片化信息环境的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021大厂最新Android面试真题解析

Android大厂面试真题解析

各个模块学习视频:如数据结构与算法

算法与数据结构资料图

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。 一线互联网架构师

这份体系学习笔记,适应人群:**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得!

直接点击这里前往我的GitHub中下载,就可以白嫖啦,记得给文章点个赞哦。