方法一

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. java学习之动态代理模式

    package com.gh.dynaproxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Metho ...

  2. C++一些注意点之异常处理

    几篇文章:(1)http://blog.csdn.net/daheiantian/article/details/6530318 (2)http://blog.chinaunix.net/uid-21 ...

  3. iOS_第3方类库_BlurAlertView_GPUImage

    最终效果图: 先加入GPUImage.framework 导入BlurAlertView的类声明和类实现 // // BlurAlertView.h // 特效弹出框 // // Created by ...

  4. iOS开发- 打包ipa,让别人设备安装你的App

    一般在接外包的时候, 通常第三方须要安装你的app进行測试(这时候你的app肯定是还没传到app store之前). 这样的情况下.假设是企业账号就好办了, 随便安装.. 可是个人开发人员账号呢? 假 ...

  5. 性能测试工具:AB

    ###################################################################################格式:ab -n 请求次数 -c ...

  6. [javascript]在浏览器端应用cookie记住用户名

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. ZOJ 3331 Process the Tasks 双塔Dp

    用dp[i][j]表示当前安排好了前i个任务,且机器A和机器B完成当前分配到的所有任务的时间差为j(这里j可正可负,实现的时候需要加个offset)时,完成这些任务的最早时间.然后根据j的正负,分别考 ...

  8. django笔记(二)

    Model many-to-many可以通过through来定义详细信息. 表结构: property django可以用F和Q来配合查找,F可以用于同一个model不同field之间进行比较,可以对 ...

  9. go - 变量和常量

    1.定义变量 goLang中定义变量的方式很多 先声明再使用:如果定义的变量未使用编译时会报错 a. /*定义单个变量*/ var varName type //定义一个 type 类型的变量 var ...

  10. hdu 4063 Aircraft(计算几何+最短路)

    不说了...说多了都是泪...从昨天下午一直wa到现在,直到刚刚才让人帮我找到所谓的“bug”,其实也算不上bug... 这个题的思路就是:找出平面上的所有点:所有圆的交点以及所有圆的圆心.然后依次判 ...