Java/Android倒計時(開始,暫停,恢復,停止)


 

由於要做暫停和恢復,這里我就沒有使用Android的CountDownTimer,而是用了Java的Timer。所以,這個方法在java肯定是通用。我也外加了Android獨有的Service,有些計時器需要在Activiy關閉的情況下依然在計時,回到Activity時,顯示當前的計時狀態。

Timer 這個Java的類,具體看Java的API說明,但是要注意一點:

Timer 在cancel后,需要重新new 一次。

首先要給計時器定義三個狀態:准備,開始,暫停。

 

[java]  view plain copy
  1. public static final int PREPARE = 0;  
  2. public static final int START = 1;  
  3. public static final int PASUSE = 2;  

1.准備:沒有開始計時,最初始狀態;

 

2.開始:已經開始倒計時

3.暫停:已經開始倒計時,而且用戶點擊了暫停

 

開始、恢復倒計時,我定義了這個方法:

 

[java]  view plain copy
  1.   
  2. private void startTimer(){  
  3.     timer = new Timer();  
  4.     timerTask = new MyTimerTask();  
  5.     timer.scheduleAtFixedRate(timerTask, 0, timer_unit);  
  6. }  

 

timer_unit 就是執行timer 任務的時間,我定義為1秒。MyTimerTask是我定義的一個倒計時計算方法,如下:

 

[java]  view plain copy
  1.   
  2. private class MyTimerTask extends TimerTask{  
  3.   
  4.     @Override  
  5.     public void run() {  
  6.         timer_couting -=timer_unit;  
  7.         if(timer_couting==0){  
  8.             cancel();  
  9.             initTimerStatus();  
  10.         }  
  11.         mHandler.sendEmptyMessage(1);  
  12.     }  
  13. }  
timer_couting 是一個變量,記錄當前倒計時還剩余多少時間,當剩余時間為0時,倒計時結束,所以cancel結束倒計時。每次倒計一秒通過handler發送到主線程來更新ui提示倒計時信息。

 

在界面上定義兩個按鈕,一個開始,一個停止,開始后可以暫停,暫停后可以恢復。

 

[java]  view plain copy
  1. case R.id.btn_start:  
  2.       switch (timerStatus){  
  3.           case CountDownTimerUtil.PREPARE:  
  4.               startTimer();  
  5.               timerStatus = CountDownTimerUtil.START;  
  6.               btnStart.setText("PAUSE");  
  7.               break;  
  8.           case CountDownTimerUtil.START:  
  9.               timer.cancel();  
  10.               timerStatus = CountDownTimerUtil.PASUSE;  
  11.               btnStart.setText("RESUME");  
  12.               break;  
  13.           case CountDownTimerUtil.PASUSE:  
  14.               startTimer();  
  15.               timerStatus = CountDownTimerUtil.START;  
  16.               btnStart.setText("PAUSE");  
  17.               break;  
  18.       }  
  19.       break;  
  20.   case R.id.btn_stop:  
  21.       if(timer!=null){  
  22.           timer.cancel();  
  23.           initTimerStatus();  
  24.           mHandler.sendEmptyMessage(1);  
  25.       }  

對於Android應用中需要用到關閉了Activity后依然在計時,在這里我們需要用Service,定義Service的情況跟上面類同,但是要注意的是這個計時Service是要單例模式,保證每次倒計時進來都是同一個倒計時。還需要定義一些方法來讓Activity給這個Service傳遞操作命令,開始,暫停,恢復,停止。

 

 

[java]  view plain copy
  1.   
  2. public void startCountDown(){  
  3.     startTimer();  
  4.     timerStatus = CountDownTimerUtil.START;  
  5. }  
  6.   
  7.   
  8. public void pauseCountDown(){  
  9.     timer.cancel();  
  10.     timerStatus = CountDownTimerUtil.PASUSE;  
  11. }  
  12.   
  13.   
  14. public void stopCountDown(){  
  15.     if(timer!=null){  
  16.         timer.cancel();  
  17.         initTimerStatus();  
  18.         mCountDownTimerListener.onChange();  
  19.     }  
  20. }  
在Activity里面獲取這個Service

 

 

[java]  view plain copy
  1. countDownTimerService = CountDownTimerService.getInstance(new MyCountDownLisener()  
  2.                 ,service_distination_total);  

項目源碼: https://github.com/arjinmc/Android-CountDownTimer
 
看得不爽,點我技術博客: http://blog.csdn.net/arjinmc/article/details/47775995


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM