2015-05-28 65 views
1

我正在編寫一個HIIT(高強度間隔訓練)活動,爲此我正在實現一個間隔計時器。 CountDownTimer應該完成5分鐘的熱身,然後繼續進行HIIT訓練。android:onFinish()for CountDownTimer在聲明新聲明之後調用

public class WarmUpActivity extends ActionBarActivity{ 

    TextView Mode; 
    TextView Time; 
    int minutes; 
    long time_remaining; 
    boolean warmup_finished; 
    private CountDownTimer HIIT_Timer; 


    private void StartTimer() { 
     HIIT_Timer = new CountDownTimer(time_remaining, 1000) { 
      @Override 
      public void onTick(long millisUntilFinished) { 
       time_remaining = millisUntilFinished; //in case activity is paused or stopped 
       Time.setText(" " + (int)floor(millisUntilFinished/60000) + ":" + ((millisUntilFinished/1000) % 60)); 

       if (warmup_finished == true) { //if we are in HIIT mode 
        if ((int)millisUntilFinished % 60000 == 0) { //every minute 
         if (Mode.getText() == "Low Intensity") 
          Mode.setText("High Intensity"); 
         else 
          Mode.setText("Low Intensity"); 
        } 
       } 
      } 

      @Override 
      public void onFinish() { 
       if (warmup_finished==false){ 
        Mode.setText("Low Intensity"); 
        warmup_finished = true; 
        HIIT_Method(); 
        return; 
       } 
       else { 
        Completed_Method(); 
        return; 
       } 

      } 
     }.start(); 
    } 


    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.hiit_layout); 

     Mode=(TextView) findViewById(R.id.mode); 
     Time=(TextView) findViewById(R.id.time); 

     warmup_finished=false; 
     Mode.setText("Warm-Up"); 
     time_remaining=5*60000; //5 minutes when created 

     } 

    @Override 
    public void onStart(){ 

     super.onStart(); 
     StartTimer(); 
     return; 
    } 


    private void HIIT_Method(){ 
     minutes=getIntent().getIntExtra(SelectHIITDuration.MINUTES, 0); 
     time_remaining=minutes*60000; 
     StartTimer(); 
     return; 
    } 

    private void Completed_Method(){ 
     Mode.setText("Workout Completed"); 

    } 
} 

當暖機完成並onFinish()被稱爲首次,HIIT_Method被調用,其中,所述定時器HIIT應該開始與用戶指定的持續時間。問題是,在使用Start_Timer()聲明新定時器之後,以某種方式調用Completed_Method。它只能從onFinish()調用。爲什麼在聲明新的定時器後調用onFinish()

+0

你有沒有打過電話您最初的START_TIMER在OnCreate中代替的OnStart?不知道這是否會解決任何問題。 – vkuo

+0

謝謝。這工作。我的新計時器啓動時不會執行Completed_Method()。我不知道爲什麼這工作。一個解釋將非常感謝,因爲我是新的android開發。 – JackOfAllTrades

+0

發送回答,讓我知道這是否令人滿意。 – vkuo

回答

0

我們需要將您的調用從onStart移動到startTimer到onCreate。

這裏的問題是瞭解Android活動的生命週期。有比我更瞭解的人的一個非常好的解釋被解釋爲here

現在從我的理解,我們通常不會觸及onStart,直到我們開始擔心服務綁定和數據庫查詢,但其他開發人員可能會有不同的想法。

上的活動的生命週期Android官方文檔可以發現here