0

OK みんな、私はクラッシュし続ける Android タイマー アプリを作成しています。私は、25分に達するとリセットされ、再びスタートするクロノメーターを使用しています. これは、開始ボタン onclicklistener の for ループによって行われています。ループには、ステートメントによる経過時間の値を long 型変数に代入する別の while ループがあります。

// for ループ内の while ループの内容

 while(found==1){
                temp = chrono.getBase() + SystemClock.elapsedRealtime();
                if(temp == 25*60*1000){
                    found--;
                }

時間はミリ秒単位で測定されるため、1000 を掛けましたか? 私はこれを間違っているのですか、それとも何か他のことですか。ありがとう。

4

2 に答える 2

2

whileループは、条件が満たされるまでメインUIスレッドをブロックする可能性found==1があります。おそらく必要なのはとTimerですTimerTaskまたは、この記事で推奨されているように、ハンドラーを使用してRunnableを起動し、50または100ミリ秒ごとにクロノメーター時間を更新できます。次に例を示します(リンクされた記事からテストおよび適合されていません!):

private Handler handler = new Handler();
handler.postDelayed(runnable, 100);

private Runnable runnable = new Runnable() {
   @Override
   public void run() {
      /* do what you need to do */
      boolean isTimerReady=foobar();
      /* and here comes the "trick" */
      if (!isTimerReady) handler.postDelayed(this, 100);
   }
};

これはfoobar()100ミリ秒ごとに開始されます。foobar()ブール値を返す必要があります-基本的にはwhileループでの計算であり、ユーザーインターフェイスを更新します。foobar()trueを返すと、はRunnable再起動されません。

于 2013-02-07T13:16:17.803 に答える
0

あなたはCPUを殺していて、おそらく止まらないでしょう。temp が正確に 25 * 60 * 1000 になる可能性は非常に低いです。その "==" チェックを ">=" に変更します。また、found には「ブール値」を使用してください。より理にかなっています。

于 2013-02-07T13:06:36.307 に答える