Long version:
The last time I did a deep dive on this topic was 2012, in the context of this issue:
In short, developers were passing larger intervals for location updates (e.g., 30 seconds) to the LocationManager, but the device would ignore value and update the app at 1 Hz, and I was trying to figure out why this was happening, which largely boils down to the same question of how location updates are scheduling.
At the time, the Android platform would check in with the native location implementation to see if the hardware could handle location scheduling. Hardware scheduling is more energy-efficient than software Android platform scheduling because the main processor can go to sleep. The source of the above issue was that the native code would report to Android that it could handle location scheduling, but then it ignored the parameters passed in and always went with 1 Hz. At the time Android engineers implemented more CTS tests to try and prevent OEMs from making this mistake going forward.
Fast-forward to now - it looks like the same general concept is still in use - here's the AOSP GnssLocationProvider code that checks if the native code can handle update scheduling:
From quickly skimming the code, it looks like if hardware can't schedule updates, then AOSP schedules the hibernation here:
...which says:
// stop GPS until our next fix interval arrives
stopNavigating();
mAlarmManager.cancel(mTimeoutIntent);
mAlarmManager.cancel(mWakeupIntent);
long now = SystemClock.elapsedRealtime();
mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, now + mFixInterval, mWakeupIntent);
This uses the AlarmManager and the system clock elapsedRealtime value (which is in milliseconds) and the fix interval (which the app passed in, also in milliseconds) to schedule the next wake up to fire up the GNSS again. So it looks like this entire pipeline is indeed in milliseconds, which in theory should allow for update frequencies greater than 1 Hz (i.e., intervals less than one second).
However, on most devices launched in the last few years this AOSP code most likely isn't used, and instead hardware should handle the update scheduling. The last few iterations of Android have focused a lot of effort on better battery life, and moving location scheduling to hardware was one of these tasks.
Unfortunately, on your own device I don't think there is an easy way to see whether the location scheduling is happening at the hardware or Android level, unless you flash a modified version of AOSP on a device like I did when testing back in 2012.
I'd welcome thoughts from anyone else who might have ideas on how to confirm this.
Sean