Java/Android倒计时(开始,暂停,恢复,停止)

 

由于要做暂停和恢复,这里我就没有使用Android的CountDownTimer,而是用了Java的Timer。所以,这个方法在java肯定是通用。我也外加了Android独有的Service,有些计时器需要在Activiy关闭的情况下依然在计时,回到Activity时,显示当前的计时状态。

Timer 这个Java的类,具体看Java的API说明,但是要注意一点:

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

首先要给计时器定义三个状态:准备,开始,暂停。

 

  1. public static final int PREPARE = 0;  
  2. public static final int START = 1;  
  3. public static final int PASUSE = 2;  

1.准备:没有开始计时,最初始状态;

 

2.开始:已经开始倒计时

3.暂停:已经开始倒计时,而且用户点击了暂停

 

开始、恢复倒计时,我定义了这个方法:

 

  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是我定义的一个倒计时计算方法,如下:

 

  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提示倒计时信息。

 

在界面上定义两个按钮,一个开始,一个停止,开始后可以暂停,暂停后可以恢复。

 

  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传递操作命令,开始,暂停,恢复,停止。

 

 

  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

 

 

  1. countDownTimerService = CountDownTimerService.getInstance(new MyCountDownLisener()  
  2.                 ,service_distination_total);  

项目源码:https://github.com/arjinmc/Android-CountDownTimer
 
看得不爽,点我技术博客:http://blog.csdn.net/arjinmc/article/details/47775995
posted @ 2018-04-02 10:31  新感觉  阅读(5908)  评论(0编辑  收藏  举报