取消后倒数计时器也不会停止

时间:2017-08-27 13:57:01

标签: android performance android-layout android-fragments countdowntimer

这就是我在我的应用程序中使用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中设置并检查了布尔值,但这也没有用。

1 个答案:

答案 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(),并且应该让框架为您执行此操作。