private ScheduledExecutorService scheduler;
private ScheduledFuture<?> scheduledFuture;
final int REPEAT_PERIOD = 1230;
private void startOrRestartRepeatingTask() {
if (scheduler == null || scheduler.isShutdown()) {
scheduler = Executors.newSingleThreadScheduledExecutor();
}
if (scheduledFuture != null && !scheduledFuture.isDone()) {
Log.w(TAG, "A task is already running. Cancelling it now.");
scheduledFuture.cancel(true);
}
Log.w(TAG, "Scheduling a new task with a fixed delay of " + REPEAT_PERIOD + " seconds.");
final Runnable taskToRun = () -> {
Log.w(TAG, "Task executing at: " + LocalTime.now());
sounds = new Sounds(this);
};
// --- THE FIX IS HERE ---
// Use scheduleWithFixedDelay instead of scheduleAtFixedRate
scheduledFuture = scheduler.scheduleWithFixedDelay(
taskToRun,
REPEAT_PERIOD,
REPEAT_PERIOD,
TimeUnit.SECONDS
);
}