TimerTask vs Thread.sleep vs Handler postDelayed - most accurate to call function every N milliseconds? TimerTask vs Thread.sleep vs Handler postDelayed - most accurate to call function every N milliseconds? android android

TimerTask vs Thread.sleep vs Handler postDelayed - most accurate to call function every N milliseconds?


There are some disadvantages of using Timer

  • It creates only single thread to execute the tasks and if a tasktakes too long to run, other tasks suffer.
  • It does not handleexceptions thrown by tasks and thread just terminates, which affectsother scheduled tasks and they are never run

ScheduledThreadPoolExecutor deals properly with all these issues and it does not make sense to use Timer.. There are two methods which could be of use in your case.. scheduleAtFixedRate(...) and scheduleWithFixedDelay(..)

class MyTask implements Runnable {  @Override  public void run() {    System.out.println("Hello world");  } }ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);long period = 100; // the period between successive executionsexec.scheduleAtFixedRate(new MyTask(), 0, period, TimeUnit.MICROSECONDS);long delay = 100; //the delay between the termination of one execution and the commencement of the nextexec.scheduleWithFixedDelay(new MyTask(), 0, delay, TimeUnit.MICROSECONDS);


On Android you can create Thread with it's own Handler/Message Queue. It's quite accurate. When you see Handler documentation you can see, that it was designed for that.

There are two main uses for a Handler: (1) to schedule messages and runnables to be executed as some point in the future; and (2) to enqueue an action to be performed on a different thread than your own.


They are all the same precision-wise. Java timing precision is subject to the precision and accuracy of system timers and schedulers and is not guaranteed. See Thread.sleep and Object.wait API.