方法一

Timer与TimerTask(Java实现)

public class timerTask extends Activity{       private int recLen = 11;      private TextView txtView;      Timer timer = new Timer();       public void onCreate(Bundle savedInstanceState){          super.onCreate(savedInstanceState);                    setContentView(R.layout.timertask);          txtView = (TextView)findViewById(R.id.txttime);                    timer.schedule(task, 1000, 1000);       // timeTask      }          TimerTask task = new TimerTask() {          @Override          public void run() {               runOnUiThread(new Runnable() {      // UI thread                  @Override                  public void run() {                      recLen--;                      txtView.setText(""+recLen);                      if(recLen < 0){                          timer.cancel();                          txtView.setVisibility(View.GONE);                      }                  }              });          }      };  }  



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

public class timerTask extends Activity{      private int recLen = 11;      private TextView txtView;      Timer timer = new Timer();       public void onCreate(Bundle savedInstanceState){          super.onCreate(savedInstanceState);           setContentView(R.layout.timertask);          txtView = (TextView)findViewById(R.id.txttime);           timer.schedule(task, 1000, 1000);       // timeTask      }          final Handler handler = new Handler(){          @Override          public void handleMessage(Message msg){              switch (msg.what) {              case 1:                  txtView.setText(""+recLen);                  if(recLen < 0){                      timer.cancel();                      txtView.setVisibility(View.GONE);                  }              }          }      };       TimerTask task = new TimerTask() {          @Override          public void run() {              recLen--;              Message message = new Message();              message.what = 1;              handler.sendMessage(message);          }      };  }


方法三

Handler与Message(不用TimerTask)public class timerTask extends Activity{      private int recLen = 11;      private TextView txtView;       public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);             setContentView(R.layout.timertask);           txtView = (TextView)findViewById(R.id.txttime);           Message message = handler.obtainMessage(1);     // Message          handler.sendMessageDelayed(message, 1000);      }         final Handler handler = new Handler(){           public void handleMessage(Message msg){         // handle message              switch (msg.what) {              case 1:                  recLen--;                  txtView.setText("" + recLen);                   if(recLen > 0){                      Message message = handler.obtainMessage(1);                      handler.sendMessageDelayed(message, 1000);      // send message                  }else{                      txtView.setVisibility(View.GONE);                  }              }               super.handleMessage(msg);          }      };  }  


方法四

Handler与Thread(不占用UI线程)

public class timerTask extends Activity{      private int recLen = 0;      private TextView txtView;       public void onCreate(Bundle savedInstanceState){          super.onCreate(savedInstanceState);           setContentView(R.layout.timertask);          txtView = (TextView)findViewById(R.id.txttime);                    new Thread(new MyThread()).start();         // start thread      }          final Handler handler = new Handler(){          // handle          public void handleMessage(Message msg){              switch (msg.what) {              case 1:                  recLen++;                  txtView.setText("" + recLen);              }              super.handleMessage(msg);          }      };       public class MyThread implements Runnable{      // thread          @Override          public void run(){              while(true){                  try{                      Thread.sleep(1000);     // sleep 1000ms                      Message message = new Message();                      message.what = 1;                      handler.sendMessage(message);                  }catch (Exception e) {                  } 


方法五

Handler与Runnable(最简单型)  public class timerTask extends Activity{      private int recLen = 0;      private TextView txtView;       public void onCreate(Bundle savedInstanceState){          super.onCreate(savedInstanceState);           setContentView(R.layout.timertask);          txtView = (TextView)findViewById(R.id.txttime);                    handler.postDelayed(runnable, 1000);      }          Handler handler = new Handler();      Runnable runnable = new Runnable() {          @Override          public void run() {              recLen++;              txtView.setText("" + recLen);              handler.postDelayed(this, 1000);          }      };  }  


计时与倒计时
方法1,方法2和方法3,都是倒计时
方法4,方法5,都是计时
计时和倒计时,都可使用上述方法实现(代码稍加改动)

UI线程比较
方法1,方法2和方法3,都是在UI线程实现的计时;
方法4和方法5,是另开Runnable线程实现计时

实现方式比较
方法1,采用的是Java实现,即Timer和TimerTask方式;
其它四种方法,都采用了Handler消息处理

推荐使用
如果对UI线程交互要求不很高,可以选择方法2和方法3
如果考虑到UI线程阻塞,严重影响到用户体验,推荐使用方法4,另起线程单独用于计时和其它的逻辑处理
方法5,综合了前几种方法的优点,是最简的

更多相关文章

  1. android 设置线程优先级 两种方式
  2. Android studio移动项目到另外一个文件夹,结果不能安装的解决方法
  3. Android Studio——Android获取屏幕宽度的4种方法
  4. android直接创建桌面快捷方式
  5. android的快捷方式——应用程序界面
  6. Android Studio引入FFmpeg的方法
  7. Android TextUtils类常用方法
  8. Android 线程的结束,挂起和恢复

随机推荐

  1. 学习asp.net的学习顺序与学习内容分享
  2. asp.net如何利用ashx生成图形验证码的实
  3. ASP.NET中有关Config文件的读写功能讲解
  4. 几种RIA技术介绍
  5. C#中的正则表达式如何验证中文字符的实例
  6. Asp.Net用控件实现本地图片的显示
  7. 理解ASP.NET中多层架构
  8. C#关于验证身份证号码的实例分析(正确性)
  9. 比较.NET中接口与类的区别
  10. C#如何实现添加和修改以及删除PDF书签的