0

这是怎么了我在我的应用程序中使用CountdownTimer倒数计时器甚至没有停止后取消

我从Fragment

CounterClass counterClass=CounterClass.getInstance(180000,1000); 
counterClass.setTextView(tvTimer); 
counterClass.setContext(getActivity().getApplicationContext()); 
counterClass.start(); 

调用它,当用户从活动按后退按钮,我用这个代码

CounterClass.getInstance().cancel(); 
CounterClass.getInstance().onFinish(); 

,但这并没有帮助,我在onTick增加了Log消息,我可以看到蜱孔蒂即使在cancel被调用后仍然工作。

这是我实现的CountDownTimer

public class CounterClass extends CountDownTimer { 


    public static CounterClass getInstance(long millisInFuture, long countDownInterval){ 
     instance = new CounterClass(millisInFuture, countDownInterval); 
     return instance; 
    } 



@Override 
    public void onTick(long millisUntilFinished) { 
     long millis= millisUntilFinished; 
     elapsedTime = millisUntilFinished; 

     String hms= String.format("%02d:%02d", 
     TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished), 
     TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
         TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))); 
     tvTimer.setText(hms); 

} 

} 

请指导我如何停止和复位定时器。我也试过boolean的方法,在那里我设置并检查布尔值onTick,但这也没有奏效。

回答

1

在每次致电getInstance()时,您正在创建计数器类的新实例。对于这种单例模式,每次都要返回相同的实例。现在发生的事情是,当旧实例继续运行时,您将取消新实例。你需要做一个MOD你的代码是这样的:

public class CounterClass extends CountDownTimer { 

    private static CounterClass sInstance; 

    public static CounterClass getInstance(long millisInFuture, long countDownInterval){ 
     if (sInstance == null) { 
      sInstance = new CounterClass(millisInFuture, countDownInterval); 
     } 
     return sInstance; 
    } 
    ... 

你也可能不需要调用onFinish()自己,应该让框架为你做的。