0

我尝试了多种方法来让单个持久计时器在多个活动中更新 ui,但似乎没有任何效果。我尝试过 AsyncTask、Handler 和 CountDownTimer。下面的代码不执行第一个 Log.i 语句......有没有更好的方法在 Main(这是唯一的持久类)中启动计时器(必须从另一个类调用)?

 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","Timer running") 语句,并且 CountDownTimer 似乎永远不会启动。MainLawTimer 仅从另一个类调用(不在同一个类中。

4

2 回答 2

1

对于倒数计时器

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 ); 

您可以使用 aAsyncTask或 aTimer 或 a CountDownTimer

于 2013-06-30T04:27:14.433 回答
0

谢谢大家的帮助,我在代码中发现了错误... timeLeft 以秒为单位而不是毫秒。由于 timeLeft 低于 1000(等待期),因此计时器从未启动。

于 2013-07-01T20:49:24.517 回答