方法一

Timer与TimerTask(Java实现)

[java]  view plain copy print ?

 
  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 plain
copy
print
?

 

  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. }

方法三

Handler与Message(不用TimerTask)

[java] 
view plain
copy
print
?

 

  1. public class timerTask extends Activity{
  2. private int recLen = 11;
  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. Message message = handler.obtainMessage(1);     // Message
  9. handler.sendMessageDelayed(message, 1000);
  10. }
  11. final Handler handler = new Handler(){
  12. public void handleMessage(Message msg){         // handle message
  13. switch (msg.what) {
  14. case 1:
  15. recLen--;
  16. txtView.setText("" + recLen);
  17. if(recLen > 0){
  18. Message message = handler.obtainMessage(1);
  19. handler.sendMessageDelayed(message, 1000);      // send message
  20. }else{
  21. txtView.setVisibility(View.GONE);
  22. }
  23. }
  24. super.handleMessage(msg);
  25. }
  26. };
  27. }

方法四

Handler与Thread(不占用UI线程)

[java] 
view plain
copy
print
?

 

  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;
  28. handler.sendMessage(message);
  29. }catch (Exception e) {
  30. }
  31. }
  32. }
  33. }
  34. }

方法五

Handler与Runnable(最简单型)

[java] 
view plain
copy
print
?

 

  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. handler.postDelayed(runnable, 1000);
  9. }
  10. Handler handler = new Handler();
  11. Runnable runnable = new Runnable() {
  12. @Override
  13. public void run() {
  14. recLen++;
  15. txtView.setText("" + recLen);
  16. handler.postDelayed(this, 1000);
  17. }
  18. };
  19. }

计时与倒计时

方法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 计时与倒计时的更多相关文章

  1. [转]Android实现计时与倒计时(限时抢购)的几种方法

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

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

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

  3. Android 获取验证码倒计时实现

    Android 获取验证码倒计时实现 2017年10月24日 09:55:41 FBY展菲 阅读数:2002    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...

  4. Android使用CountDownTimer倒计时

    1.布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android ...

  5. 拓展 Android 原生 CountDownTimer 倒计时

    拓展 Android 原生 CountDownTimer 倒计时 [TOC] CountDownTimer 在系统的CountDownTimer上进行的修改,主要是拓展了功能,当然也保留了系统默认的模 ...

  6. Android计时器和倒计时

    Android计时器和倒计时 计时器两个核心类 Timer 和 TimerTask 1) Timer核心方法 Java代码  //Schedules the specified task for ex ...

  7. Android中的倒计时实现

    一.android.os包下提供了倒计时的抽象工具类: public abstract class CountDownTimer { /** * Millis since epoch when ala ...

  8. Android 在线订单倒计时设计

        接到一个需求,用户下单后,商店这边需要显示在线订单列表,订单十分钟内有效.于是需要设计倒计时,显示每个订单剩余处理时间.       倒计时剩余时间: 订单创建时间 + 10分钟  - 系统当 ...

  9. Android中实现倒计时

    1.需求 弹出提示的dialog,实现倒计时,结束后关闭dialog 2.dialog界面布局 <?xml version="1.0" encoding="utf- ...

随机推荐

  1. Sphnix

    Sphinx高性能的搜索引擎(简单.强大.实用) http://blog.csdn.net/lgm252008/article/details/5373354

  2. B-树和B+树的应用:数据搜索和数据库索引

    B-树和B+树的应用:数据搜索和数据库索引  B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每 ...

  3. Cloud Foundry中warden的网络设计实现——iptable规则配置

    在Cloud Foundry v2版本号中,该平台使用warden技术来实现用户应用实例执行的资源控制与隔离. 简要的介绍下warden,就是dea_ng假设须要执行用户应用实例(本文暂不考虑ward ...

  4. HTML高级选项卡(1)————表标签

    利用上述表格属性,能够简单的创建一个表格.并随意的分割行和列. <html> <head> <title>表格的应用</title> </head ...

  5. poj1742 多重背包的可行性问题

    http://poj.org/problem? id=1742 Description People in Silverland use coins.They have coins of value ...

  6. UML 顺序图

    顺序图 顺序图是交互图的一种形式,它显示对象沿生命线发展,对象之间随时间的交互表示为从源生命线指向目标生命线的消息.顺序图能很好地显示那些对象与其它那些对象通信,什么消息触发了这些通信,顺序图不能很好 ...

  7. UIApplication相关

    1,显示应用图标右上角的红色提示 application.applicationIconBadgeNumber = 10; 2.修改状态栏的类型 在当前控制器下设置 - (UIStatusBarSty ...

  8. 2014-7 Andrew Ng 自动化所报告听后感

    原文:http://blog.sina.com.cn/s/blog_593af2a70102uwhl.html 一早出发,8点20就赶到现场, 人越聚越多,Ng提前几分钟到达现场,掌声一片.    N ...

  9. javascript时间函数

    //时间函数 var myDate = new Date(); myDate.getYear();        //获取当前年份(2位) myDate.getFullYear();    //获取完 ...

  10. Windows Phone 8初学者开发—第18部分:在页面间导航

    原文 Windows Phone 8初学者开发—第18部分:在页面间导航 原文地址:  http://channel9.msdn.com/Series/Windows-Phone-8-Developm ...