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()ただし、機能しますが、UI は「ブロック」され、UI の一部が10 秒後にこのタイマーをキャンセルする別のタイマーを呼び出すと、タイマーが終了するまで、そのユーザーは UI をクリックして何も実行できません。したがって、UI はそれまでは使えません。

おそらくUIがブロックされておらず、ユーザーがUIで何かを実行できることを確認するためだけに、しばらく一時停止するように非ブロックタイマーを実装する方法はありますか?

つまり、UI はまだ応答性が高いと感じています。

数字についてはわかりませんが、100ミリ秒ごとに停止し、UIに道を譲り、一時停止などの後に100ミリ秒を再開すると言います。どのようなアプローチで対処するかを考えています。

4

2 に答える 2

1

ブラウザーで UI スレッドから計算を行う唯一の方法は、WebWorkersを使用することです。ただし、GWT でそれらを使用する機能はありません。ワーカー コードには特殊な GWT リンカーが必要であり、WebWorker の作成は JSNI を介してのみ可能です。

参考までに、SpeedTracerは WebWorkers を使用します。

于 2012-10-27T12:26:13.337 に答える
0

getBytes()メソッドを非同期呼び出しに変更できますか? その後、UI はメソッドが終了するのを待ってハングすることはありません。

于 2012-10-30T08:52:29.723 に答える