2013-06-30 29 views
0

我已經嘗試了多種方式讓單個持久定時器更新多個活動中的用戶界面,而且似乎沒有任何工作。我試過了一個AsyncTask,一個Handler和一個CountDownTimer。下面的代碼不執行第一個Log.i語句....是否有更好的方法來啓動計時器(必須從另一個類中調用)在Main(這是唯一的持久類)?Android定時器更新多個任務之間的用戶界面

public static void MainLawTimer() 
{ 
    MainActivity.lawTimer = new CountDownTimer(MainActivity.timeLeft, 1000) 
    { 
      public void onTick(long millisUntilFinished) 
      { 
       Log.i("aaa","Timer running. Time left: "+MainActivity.timeLeft); 
       MainActivity.timeLeft--; 

       if(MainActivity.timeLeft<=0) 
       { 
       //do stuff 
       } 
       else 
       { 
        //call method in another class       
       } 
      } 
public void onFinish() 
      { } 
    }.start(); 
} 

爲了澄清我的問題:

當我運行代碼的Log.i(「AAA」,「定時運行」)語句永遠不會在日誌中表示,而CountDownTimer似乎從來沒有開始。 MainLawTimer從另一個類只(而不是同一類中調用。

+0

「是否有更好的方式在Main(這是唯一的持久類)中啓動計時器(必須從另一個類中調用)?」。你能再詳細一點嗎? – Raghunandan

+0

@ Rilcon42你不能從計時器線程更新UI,你需要UI線程來更新UI,並且你需要在你的代碼中啓動計時器。 – PiyushMishra

+0

@PiyushMishra,我在我的代碼中啓動了計時器,我剛剛省略了未使用的OnFinish方法和.start,因爲我試圖僅提供基本要素....我已將它添加回上面的代碼中。 – Rilcon42

回答

1

對於CountDownTimer

http://developer.android.com/reference/android/os/CountDownTimer.html

您可以使用Handler

Handler m_handler; 
Runnable m_handlerTask ; 
int timeleft=100; 
m_handler = new Handler(); 
@Override 
public void run() { 
if(timeleft>=0) 
{ 
    // do stuff 
    Log.i("timeleft",""+timeleft); 
    timeleft--; 
}  
else 
{ 
    m_handler.removeCallbacks(m_handlerTask); // cancel run 
} 
    m_handler.postDelayed(m_handlerTask, 1000); 
} 
}; 
m_handlerTask.run();  

定時器

int timeleft=100; 
    Timer _t = new Timer(); 
    _t.scheduleAtFixedRate(new TimerTask() { 
      @Override 
      public void run() { 

       runOnUiThread(new Runnable() //run on ui thread 
       { 
        public void run() 
        { 
        Log.i("timeleft",""+timeleft); 
        //update ui 

        } 
       }); 
       if(timeleft>==0) 
       { 
       timeleft--; 
       } 
       else 
       { 
       _t.cancel(); 
       } 
      } 
     }, 1000, 1000); 

你可以使用AsyncTaskTimerCountDownTimer

+0

感謝您的示例,我會嘗試它們。你是否看到我上面的代碼中有錯誤,這會阻止我嘗試從工作中執行它的方式? – Rilcon42

0

謝謝大家的幫助,我發現了我的代碼中的錯誤... timeLeft是在幾秒鐘內,而不是毫秒。由於timeLeft低於1000(等待期),定時器從未開始。

相關問題