From: http://blog.csdn.net/ithomer/article/details/6903084

方法一

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() {@Overridepublic void run() {runOnUiThread(new Runnable() {// UI thread@Overridepublic 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(){@Overridepublic 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() {@Overridepublic 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);// Messagehandler.sendMessageDelayed(message, 1000);}  final Handler handler = new Handler(){public void handleMessage(Message msg){// handle messageswitch (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(){// handlepublic void handleMessage(Message msg){switch (msg.what) {case 1:recLen++;txtView.setText("" + recLen);}super.handleMessage(msg);}};public class MyThread implements Runnable{// thread@Overridepublic void run(){while(true){try{Thread.sleep(1000);// sleep 1000msMessage 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() {@Overridepublic 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 远程链接 daemon not running 解决方法
  2. Android 复习笔记之图解TextView类及其XML相关属性和方法
  3. android.support library找不到的解决方法
  4. android学习笔记----多线程断点续传下载原理设计
  5. android 调用 react-native方法
  6. Linux下面为Android Studio创建快捷方式即起动器
  7. Android线程间通信的Message机制

随机推荐

  1. Android程式编写及调试新手入门-3
  2. android中判断关于文本展示是否出现省略
  3. Android(安卓)4.4 Fence在SurfaceFlinger
  4. Android(安卓)实现item可左右滑动移除的G
  5. Android(安卓)高仿微信发朋友圈浏览图片
  6. Android(安卓)属性动画代码分析(基于Obje
  7. android webview内嵌网页js解析json 并根
  8. Android无缝切换主题,动态换肤
  9. 如何取得Android(安卓)系统的源代码--全
  10. 挑战独立开发项目能力--IT蓝豹