What is the best way to call a method on a sort of schedule? Should I use NanoTimer or just some sort of count in the update loop? Its not going to be a consistent schedule but rather a random time range say between 1 to 5 seconds.
Unless you need it to be fairly exact (to the millisecond), use the update loop. You might at worse be out by 0.0167 seconds (@ 60fps)
Or use any kind of external Timer you wish and pass things back through Application.enqueue when timer ticks.
If you are doing this a lot just use a ScheduledThreadPoolExecutor and then when that fires do what processing you can in that thread before enqueuing anything that modifies the scene graph back onto the render thread.
I decided to just use the tpf and count up.
private float timer, threshold;
...
timer += tpf;
if (timer > threshold) {
threshold = randomFloatRange(1f,4f);
timer = 0;
launch();
}