倒数计时器甚至没有停止后取消
问题描述:
这是怎么了我在我的应用程序中使用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
,但这也没有奏效。
答
在每次致电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()
自己,应该让框架为你做的。