-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

您计划TimerTask在一个小时后同时执行 10 秒。因此,所有 10 个任务都在 1 小时后执行,这使得它看起来像是 1 个执行,因为所有Toast消息同时显示。要以固定延迟安排任务,第一个任务在 1 小时后开始,请使用以下方法:

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

这将一直执行,直到您调用t.cancel().

于 2012-05-08T04:14:59.080 回答
0

这是因为您要在一小时内将 10 个 toasts 都排好队。循环的每次迭代只需要几分之一毫秒,或者可能比这多一点。要正确地将它们排入队列,您可以每次执行 3600000 * count 而不是 3600000。

这是一种可怕的方法。你应该使用 AlarmManager 来处理这样的事情。

于 2012-05-08T04:10:11.273 回答