Timer class
A simplified, browser-safe timer class. This class serves the same purpose as java.util.Timer, but is simplified because of the single-threaded environment.
To schedule a timer, simply create a subclass of it (overriding {@link #run}) and call {@link #schedule} or {@link #scheduleRepeating}.
NOTE: If you are using a timer to schedule a UI animation, use {@link com.google.gwt.animation.client.AnimationScheduler} instead. The browser can optimize your animation for maximum performance.
Example
{@example com.google.gwt.examples.TimerExample}class Timer { static List<Timer> _timers = new List<Timer>(); static bool _initialised = false; static void clearInterval(dart_async.Timer timer) { timer.cancel(); } static void clearTimeout(dart_async.Timer timer) { timer.cancel(); } static dart_async.Timer createInterval(Timer timer, int period) { return new dart_async.Timer.periodic(new Duration(milliseconds:period), (dart_async.Timer t){ timer.fire(); }); } static dart_async.Timer createTimeout(Timer timer, int delay) { return new dart_async.Timer(new Duration(milliseconds:delay), (){ timer.fire(); }); } static void _hookWindowClosing() { // Catch the window closing event. dart_html.window.onUnload.listen((dart_html.Event event) { while (_timers.length > 0) { _timers[0].cancel(); } }); } bool isRepeating = false; dart_async.Timer _timer; Function _callback; factory Timer.get(Function _callback) { if (!_initialised) { _initialised = true; _hookWindowClosing(); } return new Timer._internal(_callback); } Timer._internal(this._callback); /** * Cancels this timer. */ void cancel() { if (_timer != null) { if (isRepeating) { clearInterval(_timer); //timerId); } else { clearTimeout(_timer); //timerId); } int indx = _timers.indexOf(this); if (indx != -1) { _timers.removeAt(indx); } } } /** * This method will be called when a timer fires. Override it to implement the * timer's logic. */ void run() { _callback(); } /** * Schedules a timer to elapse in the future. * * @param delayMillis how long to wait before the timer elapses, in * milliseconds */ void schedule(int delayMillis) { if (delayMillis < 0) { throw new Exception("must be non-negative"); } cancel(); isRepeating = false; _timer = createTimeout(this, delayMillis); _timers.add(this); } /** * Schedules a timer that elapses repeatedly. * * @param periodMillis how long to wait before the timer elapses, in * milliseconds, between each repetition */ void scheduleRepeating(int periodMillis) { if (periodMillis <= 0) { throw new Exception("must be positive"); } cancel(); isRepeating = true; _timer = createInterval(this, periodMillis); _timers.add(this); } /* * Called by code when this timer fires. */ void fire() { // If this is a one-shot timer, remove it from the timer list. This will // allow it to be garbage collected. if (!isRepeating) { int indx = _timers.indexOf(this); if (indx != -1) { _timers.removeAt(indx); } } // Run the timer's code. run(); } }
Static Methods
void clearInterval(Timer timer) #
static void clearInterval(dart_async.Timer timer) { timer.cancel(); }
void clearTimeout(Timer timer) #
static void clearTimeout(dart_async.Timer timer) { timer.cancel(); }
Constructors
factory Timer.get(Function _callback) #
factory Timer.get(Function _callback) { if (!_initialised) { _initialised = true; _hookWindowClosing(); } return new Timer._internal(_callback); }
Properties
bool isRepeating #
bool isRepeating = false
Methods
void cancel() #
Cancels this timer.
void cancel() { if (_timer != null) { if (isRepeating) { clearInterval(_timer); //timerId); } else { clearTimeout(_timer); //timerId); } int indx = _timers.indexOf(this); if (indx != -1) { _timers.removeAt(indx); } } }
void fire() #
void fire() { // If this is a one-shot timer, remove it from the timer list. This will // allow it to be garbage collected. if (!isRepeating) { int indx = _timers.indexOf(this); if (indx != -1) { _timers.removeAt(indx); } } // Run the timer's code. run(); }
void run() #
This method will be called when a timer fires. Override it to implement the timer's logic.
void run() { _callback(); }
void schedule(int delayMillis) #
Schedules a timer to elapse in the future.
@param delayMillis how long to wait before the timer elapses, in
milliseconds
void schedule(int delayMillis) { if (delayMillis < 0) { throw new Exception("must be non-negative"); } cancel(); isRepeating = false; _timer = createTimeout(this, delayMillis); _timers.add(this); }
void scheduleRepeating(int periodMillis) #
Schedules a timer that elapses repeatedly.
@param periodMillis how long to wait before the timer elapses, in
milliseconds, between each repetition
void scheduleRepeating(int periodMillis) { if (periodMillis <= 0) { throw new Exception("must be positive"); } cancel(); isRepeating = true; _timer = createInterval(this, periodMillis); _timers.add(this); }