Class ShadowPausedSystemClock

java.lang.Object
org.robolectric.shadows.ShadowSystemClock
org.robolectric.shadows.ShadowPausedSystemClock

A shadow SystemClock used when LooperMode.Mode.PAUSED is active.

In this variant, System times (both elapsed realtime and uptime) are controlled by this class. The current times are fixed in place. You can manually advance both by calling SystemClock.setCurrentTimeMillis(long) or just advance elapsed realtime only by calling deepSleep(long).

SystemClock.uptimeMillis() and SystemClock.currentThreadTimeMillis() are identical.

This class should not be referenced directly. Use ShadowSystemClock instead.

  • Constructor Details

    • ShadowPausedSystemClock

      public ShadowPausedSystemClock()
  • Method Details

    • sleep

      @Implementation protected static void sleep(long millis)
      Advances the current time (both elapsed realtime and uptime) by given millis, without sleeping the current thread.
    • deepSleep

      protected static void deepSleep(long millis)
      Advances the current time (elapsed realtime only) by given millis, without sleeping the current thread.

      This is to simulate scenarios like suspend-to-RAM, where only elapsed realtime is incremented when the device is in deep sleep.

    • setCurrentTimeMillis

      @Implementation protected static boolean setCurrentTimeMillis(long millis)
      Sets the current wall time (both elapsed realtime and uptime).

      This API sets both of the elapsed realtime and uptime to the specified value.

      Use of this method is discouraged. It currently has the following inconsistent behavior:

      1. >It doesn't check permissions. In real android this method is protected by the signature/privileged SET_TIME permission, thus it is uncallable by most apps
      2. It doesn't actually change the value of System.currentTimeMillis for non-instrumented code aka nearly all user tests and apps It only allows advancing the current time, not moving it backwards
      3. It incorrectly changes the value of SystemClock.uptime, elapsedRealtime, and for instrumented code System.nanoTime. In real android these are all independent clocks

      It is recommended to use ShadowSystemClock.advanceBy instead to advance SystemClock.uptimeMillis and SystemClock.elapsedRealTime

      Returns:
      false if specified time is less than current uptime.
    • uptimeMillis

      @Implementation protected static long uptimeMillis()
    • uptimeNanos

      @Implementation(minSdk=31) protected static long uptimeNanos()
    • elapsedRealtime

      @Implementation protected static long elapsedRealtime()
    • elapsedRealtimeNanos

      @Implementation protected static long elapsedRealtimeNanos()
    • currentThreadTimeMillis

      @Implementation protected static long currentThreadTimeMillis()
    • currentThreadTimeMicro

      @HiddenApi @Implementation protected static long currentThreadTimeMicro()
    • currentTimeMicro

      @HiddenApi @Implementation protected static long currentTimeMicro()
    • currentNetworkTimeMillis

      @Implementation(minSdk=28) @HiddenApi protected static long currentNetworkTimeMillis()
    • reset

      @Resetter public static void reset()