2012-05-08 17 views
-3

私はタイマー付きのwhileループを使用しています。 問題は、すべてのループでタイマーが使用されていないことです。 初めて使用されます。最初にループ内に含まれるステートメントは、設定した遅延なしに実行されます。 タイマーがwhileループ内に含まれているので、これはどのように可能ですか? すべてのソリューション?Java/Androidプログラミング - ループFAIL

 int count = 1; 
     while (count <= 10) { 
      final Handler handler = new Handler(); 
      Timer t = new Timer(); 
      t.schedule(new TimerTask() { 
       public void run() { 
        handler.post(new Runnable() { 
         public void run() { 

         // Stuff the while loop executes 
        } 
        }); 
       } 
      }, 20000); 
      count++; 
     } 
+0

Er。タスクを実行するために10の別々のタイマーを開始しています。 ...これはあなたが望んだものですか? –

答えて

1

TimerTaskは、新しいスレッドを開始し、ループは正常に進みます。

スレッドの実行によってループ内のコードの実行が遅れることはありません。

+0

私は何をしようとしているのかなどを教えてください... 1時間に1回何かトーストしたいだけです。言い換えれば、 "// whileループが実行されます"というものがあります。そこにあるものが1時間に1回実行されます。 – user1381084

+0

私は達成しようとしていることについて非常に具体的な別の質問を提出し、既に試したことを示すコードを提示します。 – Louth

+0

ありがとう、私はそれをやるよ。 – user1381084

0

あなたは1時間で実行するためにすべてのトーストをキューに入れているからです。あなたのループの各反復はわずか1ミリ秒か、それ以上の少しの時間がかかります。それらを正しくエンキューするには、毎回3600000ではなく3600000 *のカウントを行うことができます。

これはひどいやり方です。あなたはこのようなもののためにAlarmManagerを使うべきです。

+0

ありがとう、私はそれを試してみましょう。 – user1381084

0

1時間後に同時に実行するように10 TimerTaskをスケジュールしています。したがって、すべての10個のタスクは1時間後に実行されているため、すべてのToastメッセージが同時に表示されるため、1回実行されたように見えます。あなたがt.cancel()を呼び出すまで

Timer t = new Timer(); 
t.schedule(task, 3600000, 3600000); 

これが実行されます:1時間に開始する最初のタスクで、固定遅延でタスクをスケジュールするには、このメソッドを使用します。

+0

ありがとうございますジェイソン! – user1381084