我有这个现有的定时器功能:
final Timer waveTimer = new Timer() {
@Override
public void run() {
double value = r.getByte(); // takes quite long to finish
wave.renderWaveOnFly(value);
}};
waveTimer.scheduleRepeating(50);
然而它有效,UI被“阻止”,并且用户无法点击并在UI中执行任何操作,直到计时器完成时,部分UI调用waveTimer.cancel()
我创建了另一个取消此计时器的Timer 10秒后,因此UI在此之前无法使用。
有没有办法实现非阻塞计时器,以便暂停一段时间,也许只是为了确保UI没有被阻止,用户仍然可以在UI中执行某些操作。
我的意思是,仍然觉得用户界面仍然具有响应能力。
我不确定这个数字,但是说它停止了每100毫秒然后让位给UI并在暂停后恢复100毫秒或类似的东西。我在想什么方法来处理。
答案 0 :(得分:1)
在浏览器中从UI线程进行计算的唯一方法是使用WebWorkers。但是在GWT中没有工具可用:工作代码需要专门的GWT链接器,只能通过JSNI创建WebWorker。
仅供参考,SpeedTracer使用WebWorkers。
答案 1 :(得分:0)
您可以将 getBytes()方法更改为异步调用吗?然后UI不应该等待方法完成。