21

私はこのページを数回読んだことがありますが、GWTTimerSchedulerクラスの固有の違いのいくつかが見られません。次のそれぞれのユースケースと適用性を探しています。

  • TimerTimer::scheduleおよびTimer::scheduleRepeating
  • Scheduler::scheduleDeferred
  • Scheduler::scheduleIncremental
  • IncrementalCommand
  • DeferredCommand

これらはすべて、多かれ少なかれ同じことをしているように見え、それらすべてで同じ目的を達成できるように感じます。これは、同じことを行うための複数の方法を提供するGWTの方法ですか?そうでない場合は、それぞれがいつどこで適切に使用されているかを理解するのを手伝ってください。

4

2 に答える 2

35

何か他のことをするように指示する前に、ブラウザが現在行っていることをすべて完了する必要がある場合は、スケジューラを使用してください。例えば:

myDialogBox.show();
Scheduler.get().scheduleDeferred(new ScheduledCommand() {

    @Override
    public void execute() {
        myTextBox.setFocus();
    }
});

この例では、ブラウザがダイアログのレンダリングを完了するまでフォーカスが設定されないため、ブラウザの準備ができるまで待機するようにプログラムに指示します。

指定された時間が経過した後に何らかのアクションを実行する場合は、タイマーを使用します。例えば:

 notificationPanel.show();
 Timer timer = new Timer() {
     @Override
     public void run() {
         notificationPanel.hide();
     }
 };
 timer.schedule(10000);

このコードはnotificationPanelを表示し、10秒後に非表示にします。

于 2012-09-11T14:02:37.370 に答える
12

JavaDocが言うように、DeferredCommandは非推奨になりましたSchedulerDeferredCommandとの問題IncrementalCommandは、静的な状態になっていることです(これにより、テストで確実に使用することが困難になります)。さらに、それらの(静的)メソッドはJSNI呼び出しを行いGWTTestCase、コードをテストするためにを使用するように強制します(静的メソッドは-簡単に-モック可能ではありません)。静的メソッドは、それらをラップすることも不可能にします(たとえば、ロギングなどを追加するため)。
一方、aのインスタンスを操作しますScheduler(テスト可能なコードが必要な場合は、依存性注入を使用してスケジューラーのインスタンスを取得Scheduler.get()し、DI「ファクトリー」以外では呼び出さない)。StubSchedulerテストでは、たとえばを使用できます。

次にTimer、があります。これは他のタスクと似ていますが、スケジュールされたタスクをキャンセルできます。Timerと同じように、JSNIも使用することに注意してくださいDeferredCommand。を使用するあらゆる種類のコードは、単体テストTimerが必要になります。GWTTestCase

于 2012-09-11T12:02:43.853 に答える