0

複数のアクティビティで 1 つの永続的なタイマーで 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

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

AsyncTaskまたは またはTimer を使用できますCountDownTimer

于 2013-06-30T04:27:14.433 に答える
0

助けてくれてありがとう、コードでエラーを発見しました... timeLeft はミリ秒ではなく秒単位でした。timeLeft が 1000 (待機期間) 未満だったため、タイマーは開始されませんでした。

于 2013-07-01T20:49:24.517 に答える