-3

タイマーで while ループを使用しています。問題は、タイマーがすべてのループで使用されるわけではないということです。初回のみ使用です。ループ内に含まれるステートメントが初めて実行された後、設定した遅延なしで実行されます。タイマーがwhileループ内に含まれているため、これはどのように可能でしょうか。解決策はありますか?

        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++;
        }
4

3 に答える 3

1

TimerTask新しいスレッドを開始し、ループは通常どおり進行します。

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

于 2012-05-08T03:33:11.103 に答える
0

これは、1 時間で実行するために 10 個のトーストをキューに入れているためです。ループの各反復には、ほんの数ミリ秒か、それよりも少し多くかかる場合があります。それらを適切にエンキューするには、毎回 3600000 ではなく 3600000 * カウントを実行できます。

しかし、これはひどい方法です。このようなものには AlarmManager を使用する必要があります。

于 2012-05-08T04:10:11.273 に答える
0

TimerTask同時に 1 時間後に10 秒を実行するようにスケジュールしています。したがって、10 タスクすべてが 1 時間後に実行されています。これは、すべてのToastメッセージが同時に表示されるため、1 実行のように見えます。一定の遅延でタスクをスケジュールするには、最初のタスクが 1 時間後に開始されるようにするには、次の方法を使用します。

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

これは、 を呼び出すまで実行されますt.cancel()

于 2012-05-08T04:14:59.080 に答える