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()自己,應該讓框架爲你做的。