由于要做暂停和恢复,这里我就没有使用Android的CountDownTimer,而是用了Java的Timer。所以,这个方法在java肯定是通用。我也外加了Android独有的Service,有些计时器需要在Activiy关闭的情况下依然在计时,回到Activity时,显示当前的计时状态。
Timer 这个Java的类,具体看Java的API说明,但是要注意一点:
Timer 在cancel后,需要重新new 一次。
首先要给计时器定义三个状态:准备,开始,暂停。
    public static final int PREPARE = 0;
    public static final int START = 1;
    public static final int PASUSE = 2;1.准备:没有开始计时,最初始状态;
2.开始:已经开始倒计时
3.暂停:已经开始倒计时,而且用户点击了暂停
 
开始、恢复倒计时,我定义了这个方法:
    /**
     * start count down
     */
    private void startTimer(){
        timer = new Timer();
        timerTask = new MyTimerTask();
        timer.scheduleAtFixedRate(timerTask, 0, timer_unit);
    }timer_unit 就是执行timer 任务的时间,我定义为1秒。MyTimerTask是我定义的一个倒计时计算方法,如下:
    /**
     * count down task
     */
    private class MyTimerTask extends TimerTask{
        @Override
        public void run() {
            timer_couting -=timer_unit;
            if(timer_couting==0){
                cancel();
                initTimerStatus();
            }
            mHandler.sendEmptyMessage(1);
        }
    }在界面上定义两个按钮,一个开始,一个停止,开始后可以暂停,暂停后可以恢复。
          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传递操作命令,开始,暂停,恢复,停止。
    /**
     * start
     */
    public void startCountDown(){
        startTimer();
        timerStatus = CountDownTimerUtil.START;
    }
    /**
     * paust
     */
    public void pauseCountDown(){
        timer.cancel();
        timerStatus = CountDownTimerUtil.PASUSE;
    }
    /**
     * stop
     */
    public void stopCountDown(){
        if(timer!=null){
            timer.cancel();
            initTimerStatus();
            mCountDownTimerListener.onChange();
        }
    }countDownTimerService = CountDownTimerService.getInstance(new MyCountDownLisener()
                ,service_distination_total);项目源码: https://github.com/arjinmc/Android-CountDownTimer
 
 
 
 
 
 
 
                   
                   
                   
                   
                            
 
                             这篇博客介绍了如何在Java和Android中实现倒计时功能,包括开始、暂停、恢复和停止操作。作者选择使用Java的Timer而非Android的CountDownTimer,因为后者不支持暂停和恢复。文中提到,Timer在取消后需要重新创建。倒计时状态分为准备、开始和暂停,并提供了相关方法进行控制。此外,还提到了在Activity关闭时使用Service保持计时的连续性。
这篇博客介绍了如何在Java和Android中实现倒计时功能,包括开始、暂停、恢复和停止操作。作者选择使用Java的Timer而非Android的CountDownTimer,因为后者不支持暂停和恢复。文中提到,Timer在取消后需要重新创建。倒计时状态分为准备、开始和暂停,并提供了相关方法进行控制。此外,还提到了在Activity关闭时使用Service保持计时的连续性。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   596
					596
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            