Программирование на Java / Android - Loop FAIL

Я использую цикл while с таймером. Дело в том, что таймер не используется в каждом цикле. Используется только в первый раз. После первого раза операторы, включенные в цикл, выполняются без задержки, которую я установил. Как это вообще возможно, поскольку таймер включен в цикл while. Любые решения?

<code>        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++;
        }
</code>
 Zéychin08 мая 2012 г., 08:44
Er. Вы запускаете десять отдельных таймеров для выполнения задачи. ... Это то, что вы хотели?

Ответы на вопрос(3)

TimerTasks выполнить через час, в то же время. Таким образом, все 10 задач выполняются через 1 час, что выглядит как 1 выполнение, так как всеToast сообщения отображаются одновременно. Чтобы запланировать задачи с фиксированной задержкой, когда первая задача запускается через 1 час, используйте этот метод:

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

Это будет выполняться, пока вы не позвонитеt.cancel().

 user138108408 мая 2012 г., 06:21
Большое спасибо, Джейсон!

TimerTask запускает новый поток, а затем цикл продолжается как обычно.

Выполнение потока не вызывает задержку выполнения кода в вашем цикле.

 user138108408 мая 2012 г., 05:45
Спасибо, я сделаю это.
 08 мая 2012 г., 05:43
Я отправляю еще один вопрос, который очень конкретен в отношении того, чего вы пытаетесь достичь, и показывает код, который демонстрирует то, что вы уже пробовали.
 user138108408 мая 2012 г., 05:38
Позвольте мне привести вам пример того, что я пытаюсь сделать ... Я просто хочу выпить что-нибудь раз в час. Другими словами & quot; // Заполняем цикл while & quot; я хочу, чтобы то, что там, выполнялось раз в час.

что вы ставите в очередь до 10 тостов, которые нужно выполнить за один час. Каждая итерация вашего цикла занимает всего лишь долю миллисекунды или, может быть, чуть больше. Чтобы правильно поставить их в очередь, вы могли бы делать 3600000 * подсчет вместо 3600000 каждый раз.

Это ужасный способ сделать это все же. Вы должны использовать AlarmManager для подобных вещей.

 user138108408 мая 2012 г., 06:11
Спасибо, я попробую.

Ваш ответ на вопрос