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
yTimer::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.