这就是我在我的应用程序中使用CountdownTimer
的方式
我是从Fragment
CounterClass counterClass=CounterClass.getInstance(180000,1000);
counterClass.setTextView(tvTimer);
counterClass.setContext(getActivity().getApplicationContext());
counterClass.start();
当用户按下活动按钮时,我使用此代码
CounterClass.getInstance().cancel();
CounterClass.getInstance().onFinish();
但这没有帮助,我在Log
中添加了onTick
消息,即使在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
中设置并检查了布尔值,但这也没有用。
答案 0 :(得分:2)
每次调用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()
,并且应该让框架为您执行此操作。