Class Scheduler

  • Direct Known Subclasses:
    LooperDelegatingScheduler

    public class Scheduler
    extends Object
    Class that manages a queue of Runnables that are scheduled to run now (or at some time in the future). Runnables that are scheduled to run on the UI thread (tasks, animations, etc) eventually get routed to a Scheduler instance.

    The execution of a scheduler can be in one of three states:

    • paused (pause()): if paused, then no posted events will be run unless the Scheduler is explicitly instructed to do so, correctly matching Android's behavior.
    • normal (unPause()): if not paused but not set to idle constantly, then the Scheduler will automatically run any Runnables that are scheduled to run at or before the Scheduler's current time, but it won't automatically run any future events. To run future events the Scheduler needs to have its clock advanced.
    • idling constantly: if idleConstantly(boolean) is called with true, then the Scheduler will continue looping through posted events (including future events), advancing its clock as it goes.
    • Constructor Detail

      • Scheduler

        public Scheduler()
    • Method Detail

      • getCurrentTime

        public long getCurrentTime()
        Get the current time (as seen by the scheduler), in milliseconds.
        Returns:
        Current time in milliseconds.
      • isPaused

        public boolean isPaused()
        Determine if the scheduler is paused.
        Returns:
        true if it is paused.
      • post

        public void post​(Runnable runnable)
        Add a runnable to the queue.
        Parameters:
        runnable - Runnable to add.
      • postDelayed

        public void postDelayed​(Runnable runnable,
                                long delayMillis)
        Add a runnable to the queue to be run after a delay.
        Parameters:
        runnable - Runnable to add.
        delayMillis - Delay in millis.
      • postDelayed

        public void postDelayed​(Runnable runnable,
                                long delay,
                                TimeUnit unit)
        Add a runnable to the queue to be run after a delay.
      • postAtFrontOfQueue

        public void postAtFrontOfQueue​(Runnable runnable)
        Add a runnable to the head of the queue.
        Parameters:
        runnable - Runnable to add.
      • remove

        public void remove​(Runnable runnable)
        Remove a runnable from the queue.
        Parameters:
        runnable - Runnable to remove.
      • advanceToLastPostedRunnable

        public boolean advanceToLastPostedRunnable()
        Run all runnables in the queue, and any additional runnables they schedule that are scheduled before the latest scheduled runnable currently in the queue.
        Returns:
        True if a runnable was executed.
      • advanceToNextPostedRunnable

        public boolean advanceToNextPostedRunnable()
        Run the next runnable in the queue.
        Returns:
        True if a runnable was executed.
      • advanceBy

        @InlineMe(replacement="this.advanceBy(interval, MILLISECONDS)",
                  staticImports="java.util.concurrent.TimeUnit.MILLISECONDS")
        @Deprecated
        public final boolean advanceBy​(long interval)
        Deprecated.
        Run all runnables that are scheduled to run in the next time interval.
        Parameters:
        interval - Time interval (in millis).
        Returns:
        True if a runnable was executed.
      • advanceBy

        public boolean advanceBy​(long amount,
                                 TimeUnit unit)
        Run all runnables that are scheduled to run in the next time interval.
        Returns:
        True if a runnable was executed.
      • advanceTo

        public boolean advanceTo​(long endTime)
        Run all runnables that are scheduled before the endTime.
        Parameters:
        endTime - Future time.
        Returns:
        True if a runnable was executed.
      • runOneTask

        public boolean runOneTask()
        Run the next runnable in the queue.
        Returns:
        True if a runnable was executed.
      • areAnyRunnable

        public boolean areAnyRunnable()
        Determine if any enqueued runnables are enqueued before the current time.
        Returns:
        True if any runnables can be executed.
      • reset

        public void reset()
        Reset the internal state of the Scheduler.
      • size

        public int size()
        Return the number of enqueued runnables.
        Returns:
        Number of enqueues runnables.
      • getNextScheduledTaskTime

        public Duration getNextScheduledTaskTime()
      • getLastScheduledTaskTime

        public Duration getLastScheduledTaskTime()
      • idleConstantly

        @Deprecated
        public void idleConstantly​(boolean shouldIdleConstantly)
        Deprecated.
        This method is ambiguous in how it should behave when turning off constant idle. Use setIdleState(IdleState) instead to explicitly set the state.
        Set the idle state of the Scheduler. If necessary, the clock will be advanced and runnables executed as required by the newly-set state.
        Parameters:
        shouldIdleConstantly - If true the idle state will be set to Scheduler.IdleState.CONSTANT_IDLE, otherwise it will be set to Scheduler.IdleState.UNPAUSED.