0

我有这个现有的定时器功能:

            final Timer waveTimer = new Timer() {
                @Override
                public void run() { 
                    double value = r.getByte(); // takes quite long to finish
                    wave.renderWaveOnFly(value);
            }};
            waveTimer.scheduleRepeating(50);

然而它的工作原理,用户界面被“阻止”并且用户不能点击并在用户界面中做任何事情,直到定时器完成时,当我创建另一个定时器的部分用户界面调用时waveTimer.cancel(),我创建了另一个定时器,在 10 秒后取消这个定时器,所以用户界面是在那之前不能使用。

有没有办法实现一个非阻塞计时器,让它暂停一段时间,也许只是为了确保 UI 没有被阻塞并且用户仍然可以在 UI 中做一些事情。

我的意思是,仍然感觉 UI 仍然是响应式的。

我不确定这个数字,但说它每 100 毫秒停止一次,然后让位于 UI 并在暂停或类似的情况后恢复 100 毫秒。我在想用什么方法来处理。

4

2 回答 2

1

在浏览器的 UI 线程之外进行计算的唯一方法是使用WebWorkers。但是在 GWT 中没有使用它们的便利:工作代码需要专门的 GWT 链接器,并且只能通过 JSNI 创建 WebWorker。

仅供参考,SpeedTracer使用 WebWorkers。

于 2012-10-27T12:26:13.337 回答
0

您可以将getBytes()方法更改为异步调用吗?然后 UI 不应该挂起等待方法完成。

于 2012-10-30T08:52:29.723 回答