Zirv Logo

2026-07-22 · 5 min read

Auto-pause on your runs: what it should catch and what it should ignore

A tracker that auto-pauses too eagerly punishes you every time you stop at a light. One that is too slow to react keeps racking up distance and time while you stand still waiting for a crossing, quietly wrecking your average pace. Getting this right is not really about GPS accuracy, it is about deciding, second by second, what counts as "stopped" and what is just noise.

Speed alone is not enough

The obvious approach is to watch your speed and pause the session once it drops near zero. That works outdoors, most of the time, but it breaks in two directions. Indoors, on a treadmill or a stationary bike, there often is no GPS speed to watch at all. And outdoors, GPS speed jitters on its own, a brief satellite wobble can read as a dead stop for a second even while you are mid-stride.

Zirv's auto-pause detector runs two independent signals side by side: speed, and heart rate. Either one alone can catch what the other misses. Speed is the faster signal outdoors. Heart rate keeps working when there is no GPS at all, and it also backstops speed when a signal briefly drops out.

Two thresholds, not one, per signal

Each signal does not use a single cutoff, it uses two: a lower threshold that counts as "stopped" and a separate, higher threshold that counts as "moving again." For running, speed has to fall to 0.5 m/s or below to start counting as stopped, but it has to climb back up to 1.2 m/s or above before it counts as moving. Heart rate works the same way: dropping to 100 bpm or below starts the stopped count, climbing back to 130 bpm or above starts the moving count.

That gap between the two thresholds exists on purpose. Without it, a speed or heart rate reading that happens to sit right on the boundary would flip the session between paused and running over and over, a few seconds apart, every time sensor noise nudged it across a single line. Two thresholds with real space between them mean the reading has to move meaningfully, not just noisily, before anything changes.

Sustained, not instant

Crossing a threshold once is also not enough. The detector requires a run of consecutive seconds below the stopped threshold before it fires a pause, and a separate run of consecutive seconds above the moving threshold before it fires a resume. For running, that is 8 straight seconds of low speed to pause, and 3 straight seconds of real speed to resume. Heart rate needs longer runs on both sides, 60 seconds low to pause and 30 seconds high to resume, because heart rate lags behind what your body is actually doing by a good 30 to 90 seconds. A single slow tick, or a single fast one, resets that count back to zero rather than nudging it forward, so one blip cannot get partial credit toward a pause or a resume it does not deserve.

Different activities get different numbers for the same reason. Walking and hiking use a lower stopped-speed threshold than running, since a slow amble is normal at that pace, and hiking's stopped window runs a few seconds longer than walking's to tolerate a pause to check the trail or catch a view. Cycling's thresholds sit higher still, since coasting downhill at a real clip looks nothing like a stop. None of this is a single global number, it is tuned per activity.

What a gap in the data should not do

Missing a reading for a tick, a dropped GPS fix or a HealthKit sample that has not arrived yet, does not reset anything and does not fire anything either. The count just holds where it was until a real reading shows up again, so a one or two second sensor gap cannot cost you progress toward a pause you actually earned, and cannot manufacture one you did not.

A longer gap gets treated differently. If more than 5 seconds pass between observations, the detector assumes your phone's tracking loop was suspended, the kind of thing that happens when iOS backgrounds an app, and it clears the counters before processing the next reading. Otherwise a counter that was one tick away from firing right before a suspension would fire the instant tracking resumed, based on what you were doing before the gap rather than what you are doing now.

What it deliberately leaves alone

The clearest case of "ignore this" is interval training. A rest interval is planned stillness, standing around between hard reps is the point, not an accident. Auto-pause is switched off entirely for interval sessions, both the speed signal and the heart rate signal, so the plan's own rest periods never get mistaken for you quitting the workout. The interval structure already owns the work and rest timing, auto-pause has no business overriding it.

Indoor cardio is the mirror image. There is no GPS speed indoors worth watching, so the speed signal is switched off, but heart rate stays on, since stepping off a treadmill or stopping the pedals still shows up as a real drop in effort even without a GPS trace to confirm it.

And when you pause or resume the session yourself, the detector gets out of the way rather than fighting you. A manual action clears its counters and returns it to a clean tracking state, so it does not immediately try to auto-pause a session you just resumed on purpose, or auto-resume one you just paused deliberately.

The takeaway

Auto-pause done well is less about detecting stillness and more about not reacting to noise. Two signals instead of one, two thresholds instead of one per signal, a sustained run of seconds before anything fires, and a longer gap treated as a phone that went to sleep rather than a runner who did. The result is a tracker that pauses when you actually stop, resumes when you actually move, and otherwise stays out of your data.

Zirv Logo