Android实现计时与倒计时的几种方法

方法一

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,综合了前几种方法的优点,是最简的

参考推荐:

Android之多线程工作-AsyncTask与handler

你爱我吗?已经爱到危险的程度了.危险到什么程度?已经不能一个人生活。

Android实现计时与倒计时的几种方法

相关文章:

你感兴趣的文章:

标签云: