java gwt scheduler

java - GWT: Clases de temporizador y programador



scheduler (2)

He leído esta página varias veces, y simplemente no veo algunas de las diferencias inherentes entre las clases Timer y Scheduler GWT. Estoy buscando los casos de uso y la aplicabilidad de cada uno de los siguientes:

  • Timer , Timer::schedule y Timer::scheduleRepeating
  • Scheduler::scheduleDeferred
  • Scheduler::scheduleIncremental
  • IncrementalCommand
  • DeferredCommand

Todos parecen estar haciendo lo mismo, más o menos, y parece que puedes lograr los mismos objetivos con todos ellos. ¿Es esto solo la forma en que GWT proporciona múltiples maneras de hacer lo mismo? De lo contrario, ayúdeme a comprender cuándo y dónde cada uno se usa de manera apropiada.


Como dice JavaDoc, DeferredCommand está en desuso en favor de Scheduler . El problema con DeferredCommand y IncrementalCommand es que tienen un estado estático (lo que dificulta el uso confiable de las pruebas). Además, sus métodos (estáticos) hacen llamadas JSNI, lo que te obliga a usar un GWTTestCase para probar tu código (los métodos estáticos no son -fácilmente burlables). Los métodos estáticos también hacen que sea imposible envolverlos (por ejemplo, agregar algo de registro o lo que sea).
Por otro lado, trabajas con una instancia de un Scheduler (si quieres un código comprobable, usarás la inyección de dependencia para obtener una instancia de un programador y nunca llamarás a Scheduler.get() excepto en tu "fábrica" ​​DI ) En una prueba, puede usar un StubScheduler por ejemplo.

Luego está Timer , que es similar a los demás, pero la tarea programada se puede cancelar. Tenga en cuenta que Timer usa JSNI, al igual que DeferredCommand ; cualquier tipo de código que use un Timer necesitará un GWTTestCase para ser probado por la unidad.


Use el Programador cuando necesite un navegador para completar lo que está haciendo actualmente antes de decirle que haga algo más. Por ejemplo:

myDialogBox.show(); Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { myTextBox.setFocus(); } });

En este ejemplo, el enfoque no se establecerá hasta que el navegador finalice la representación del cuadro de diálogo, por lo que le pedirá al programa que espere hasta que el navegador esté listo.

Use el temporizador si desea que ocurra alguna acción después de un período de tiempo específico. Por ejemplo:

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

Este código mostrará notificationPanel, y luego lo ocultará después de 10 segundos.