2014-01-30 155 views
8

我一直都盼望看到的方法,看是否有CountDownTimer運行與否,但我不能找到一個辦法,任何幫助將不勝感激檢查是否CountDownTimer運行

if (position == 0) { 

    mCountDown = new CountDownTimer((300 * 1000), 1000) { 

     public void onTick(long millisUntilFinished) { 
      mTextField.setText("seconds remaining: " 
        + millisUntilFinished/1000); 
     } 

     public void onFinish() { 
      mTextField.setText("0:00"); 
      String path = "/sdcard/Music/ZenPing.mp3"; 
      try { 

       mp.reset(); 
       mp.setDataSource(path); 
       mp.prepare(); 
       mp.start(); 

      } catch (IOException e) { 
       Log.v(getString(R.string.app_name), 
         e.getMessage()); 
      } 
     } 
    }.start(); 

} 

對於如何能我檢查mCountDown是否正在運行?

+0

難道你不能使用全局布爾值嗎?在調用新的CountDownTimer時將in設置爲TRUE並將onFinish()設置爲FALSE? –

+0

你能詳細說說你想達到什麼嗎? – MGDroid

+1

請注意,在onTick()和onFinish()方法中使用布爾變量來指示定時器的狀態並不明確。您可以通過cancel()方法停止定時器。在這種情況下,您的變量將仍然爲真,並指示錯誤的狀態。 –

回答

29

只要把boolean標誌,它表明,通過下面的代碼

boolean isRunning = false; 

mCountDown = new CountDownTimer((300 * 1000), 1000) { 

    public void onTick(long millisUntilFinished) { 
     isRunning = true; 
     //rest of code 
    } 

    public void onFinish() { 
     isRunning= false; 
     //rest of code 
    } 
}.start(); 
1

onTick是您正在運行的進程的回調,您可以設置屬性來跟蹤狀態。

isTimerRunning =false; 

start -> make it true;OnTick -> make it true(實際上不是必需的,但仔細檢查) 內OnFinish -> make it false;

使用isTimerRunning屬性來跟蹤狀態。

0

檢查是否CountDownTimer正在運行並且如果應用程序在後臺運行。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 
    myButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      myButton.setText("Button clicked"); 
      countDownTimer = new CountDownTimer(3000, 1000) { 
       @Override 
       public void onTick(long millisUntilFinished) { 
        //After turning the Smartphone the follow both methods do not work anymore 
        if (!runningBackground) { 
         myButton.setText("Calc: " + millisUntilFinished/1000); 
         myTextView.setText("Calc: " + millisUntilFinished/1000); 
        } 
       } 
       @Override 
       public void onFinish() { 
        if (!runningBackground) { 
         //Do something 
        } 
        mTextMessage.setText("DONE"); 
        runningBackground = false; 
        running = false; 
       } 
      }; 
      //timer started 
      countDownTimer.start(); 
      running = true; 
     } 
    }); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    runningBackground = false; 
} 

@Override 
protected void onPause() { 
    runningBackground = true; 
    super.onPause(); 
}