由於要做暫停和恢復,這里我就沒有使用Android的CountDownTimer,而是用了Java的Timer。所以,這個方法在java肯定是通用。我也外加了Android獨有的Service,有些計時器需要在Activiy關閉的情況下依然在計時,回到Activity時,顯示當前的計時狀態。
Timer 這個Java的類,具體看Java的API說明,但是要注意一點:
Timer 在cancel后,需要重新new 一次。
首先要給計時器定義三個狀態:准備,開始,暫停。
[java]
view plain
copy
- public static final int PREPARE = 0;
- public static final int START = 1;
- public static final int PASUSE = 2;
1.准備:沒有開始計時,最初始狀態;
2.開始:已經開始倒計時
3.暫停:已經開始倒計時,而且用戶點擊了暫停
開始、恢復倒計時,我定義了這個方法:
[java]
view plain
copy
- private void startTimer(){
- timer = new Timer();
- timerTask = new MyTimerTask();
- timer.scheduleAtFixedRate(timerTask, 0, timer_unit);
- }
timer_unit 就是執行timer 任務的時間,我定義為1秒。MyTimerTask是我定義的一個倒計時計算方法,如下:
[java]
view plain
copy
- private class MyTimerTask extends TimerTask{
- @Override
- public void run() {
- timer_couting -=timer_unit;
- if(timer_couting==0){
- cancel();
- initTimerStatus();
- }
- mHandler.sendEmptyMessage(1);
- }
- }
在界面上定義兩個按鈕,一個開始,一個停止,開始后可以暫停,暫停后可以恢復。
[java]
view plain
copy
- case R.id.btn_start:
- switch (timerStatus){
- case CountDownTimerUtil.PREPARE:
- startTimer();
- timerStatus = CountDownTimerUtil.START;
- btnStart.setText("PAUSE");
- break;
- case CountDownTimerUtil.START:
- timer.cancel();
- timerStatus = CountDownTimerUtil.PASUSE;
- btnStart.setText("RESUME");
- break;
- case CountDownTimerUtil.PASUSE:
- startTimer();
- timerStatus = CountDownTimerUtil.START;
- btnStart.setText("PAUSE");
- break;
- }
- break;
- case R.id.btn_stop:
- if(timer!=null){
- timer.cancel();
- initTimerStatus();
- mHandler.sendEmptyMessage(1);
- }
對於Android應用中需要用到關閉了Activity后依然在計時,在這里我們需要用Service,定義Service的情況跟上面類同,但是要注意的是這個計時Service是要單例模式,保證每次倒計時進來都是同一個倒計時。還需要定義一些方法來讓Activity給這個Service傳遞操作命令,開始,暫停,恢復,停止。
[java]
view plain
copy
- public void startCountDown(){
- startTimer();
- timerStatus = CountDownTimerUtil.START;
- }
- public void pauseCountDown(){
- timer.cancel();
- timerStatus = CountDownTimerUtil.PASUSE;
- }
- public void stopCountDown(){
- if(timer!=null){
- timer.cancel();
- initTimerStatus();
- mCountDownTimerListener.onChange();
- }
- }
[java]
view plain
copy
- countDownTimerService = CountDownTimerService.getInstance(new MyCountDownLisener()
- ,service_distination_total);
項目源碼: https://github.com/arjinmc/Android-CountDownTimer